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
Run Code Online (Sandbox Code Playgroud)
但是,当您通过管道将它传输到catwith 时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
Run Code Online (Sandbox Code Playgroud)
我的问题是,它怎么知道它是通过管道传输而不是打印出来的?或者,它是如何发生的?
ls和许多其他程序通过调用 C 函数来检测它们的输出(或有时是输入)是否附加到终端isatty(STDOUT_FILENO)。如果输出不是终端(如管道或文件),则默认为对程序更友好的输出格式。
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |