因此,我总是怀疑在以下情况下重定向的工作原理:
我输入"ls",所有文件名都用空格分隔:
test$ touch a b c
test$ ls
a b c
Run Code Online (Sandbox Code Playgroud)我使用">"将STDOUT重定向到一个文件:
test$ ls > ls.txt
test$ cat ls.txt
a
b
c
ls.txt
Run Code Online (Sandbox Code Playgroud)有趣的是,格式发生了变化,文件名由换行符分隔.似乎输出是由...生成的ls -1.
为什么后一种情况下的输出与前一种情况不同?ls实际上可以看到">"符号,以便改变它的行为吗?
Eri*_*hil 11
ls 测试其输出流以查看它是否是终端,并根据它修改其行为.
这是记录在案的; 文档的man页面有ls几个依赖于输出是否是终端的东西:
-C(对于多列输出)是默认值,否则-1(单列)是默认值.-l或-s输出是终端,则所有文件大小或块的总和将分别打印在列表之前的一行上.-q则是默认值.这会将非图形字符打印为"?".否则,-v而且-w是默认的.我-v和它之间的区别有点不清楚-w.我所说的文件-v强制"未经编辑的非图形字符-w打印"并强制"打印不可打印的字符".