因此,我一直对重定向在以下情况下的工作方式表示怀疑:
我输入“ls”,所有文件名都用空格分隔:
test$ touch a b c test$ ls a b c
我使用“>”将 STDOUT 重定向到一个文件:
test$ ls > ls.txt test$ cat ls.txt a b c ls.txt
有趣的是,格式发生了变化,文件名由换行符分隔。输出似乎是由 ls -1
生成的。
为什么后一种情况的输出与前一种情况的输出不同? ls 真的能看到“>”符号从而改变它的行为吗?
最佳答案
ls
测试它的输出流以查看它是否是一个终端,并根据它修改它的行为。
这是记录在案的; ls
的 man
页面记录了一些取决于输出是否为终端的内容:
- 如果输出是终端,
-C
(用于多列输出)是默认值,否则-1
(单列)是默认值。 - 如果使用
-l
或-s
并且输出是一个终端,所有文件大小或 block 的总和分别打印在上市。 - 如果输出是终端,
-q
是默认值。这会将非图形字符打印为“?”。否则,-v
和-w
是默认值。我不太清楚-v
和-w
之间的区别。我的文档说-v
强制“非图形字符的未编辑打印”,-w
强制“非打印字符的原始打印”。
关于linux - 为什么重定向符号会改变 ls 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997214/