ls 输出与标准输出和屏幕不同

ls 输出与标准输出和屏幕不同

看看lsvs的不同输出ls -1

$ ls
 filea1.txt   fileb.txt    listB1.xml   listC.xml
 filea.txt    listA1.xml   listB.xml   'name with spaces 2.txt'
 fileb1.txt   listA.xml    listC1.xml  'name with spaces.txt'

$ ls -1
filea1.txt
filea.txt
fileb1.txt
fileb.txt
listA1.xml
listA.xml
listB1.xml
listB.xml
listC1.xml
listC.xml
'name with spaces 2.txt'
'name with spaces.txt'

这对我来说很好。如果将输出重定向到文件,情况会有所不同。我预计该文件会有所不同,但它们是相同的。

$ ls -1>/tmp/ls-1.out
$ ls >/tmp/ls.out

$ cat /tmp/ls-1.out
filea1.txt
filea.txt
fileb1.txt
fileb.txt
listA1.xml
listA.xml
listB1.xml
listB.xml
listC1.xml
listC.xml
name with spaces 2.txt
name with spaces.txt

$ cat /tmp/ls.out
filea1.txt
filea.txt
fileb1.txt
fileb.txt
listA1.xml
listA.xml
listB1.xml
listB.xml
listC1.xml
listC.xml
name with spaces 2.txt
name with spaces.txt

为什么后者只是一列输出,而不是像没有重定向到文件时那样的多列输出?

答案1

-1ls当 的输出被重定向时默认启用。

严格来说,默认输出格式是-1按照 POSIX 中的规定:

默认格式应为每行列出一个条目到标准输出;终端或指定-C-m或选项之一时除外。-x如果输出到终端,则格式是实现定义的。

您可以通过显式指定将列式输出强制到文件-C

ls -C > /tmp/ls-C.out

相关内容