`ls`는 파이프로 연결되었는지 인쇄되었는지 어떻게 알 수 있나요?

`ls`는 파이프로 연결되었는지 인쇄되었는지 어떻게 알 수 있나요?

ls일반적으로 다음과 같이 인쇄됩니다.

1     1249  1653  23    33    4581  6202  6447  789  836  903        config.gz    kpageflags    sysrq-trigger
10    1253  1658  24    34    4582  6206  648   79   837  91         consoles     loadavg       thread-self
1003  1255  1662  251   347   4583  6207  649   791  84   923        cpuinfo      locks         timer_list
1004  1257  1667  252   35    4689  6209  6799  8    840  925        crypto       meminfo       timer_stats
1005  1261  167   26    357   48    6232  6986  80   841  998        devices      misc          uptime
1006  1263  1670  266   36    49    6242  6992  802  846  acpi       diskstats    modules       version
1008  13    1677  27    37    5     6267  6993  803  848  asound     dma          mounts        vmallocinfo

cat그러나 예를 들어 with 로 파이프하면 ls /proc | cat얻는 대로 인쇄됩니다 -1(grep 및 기타 명령에서도 동일하게 작동).

1
10
1003
1004
1005
1006
1008
1010
1012
106
107
1073
108
109
1152
117
118
1247
1249
1253

제 질문은 파이프로 연결되고 인쇄되지 않는다는 것을 어떻게 알 수 있느냐는 것입니다. 아니면 어떻게 된 일입니까?

답변1

ls다른 많은 프로그램은 출력(또는 입력)이 터미널에 연결되어 있는지 여부를 감지하기 위해 C 함수를 호출합니다 isatty(STDOUT_FILENO). 출력이 터미널(예: 파이프 또는 파일)이 아닌 경우 기본적으로 프로그램에 더 친숙한 출력 형식이 사용됩니다.

관련 정보