Bash Shell保存ls命令的输出

你尝试用重定向保存 ls 命令的输出,但查看结果文件时发现格式和预想的不同。

解决方案

重定向输出时,使用 ls 命令的 -C 选项。

下面用 ls 命令显示目录内容:

$ ls
a.out cong.txt def.conf  file.txt  more.txt  zebra.list
$

但是,当用 > 将输出重定向到文件并显示该文件内容时,看到的是如下结果:

$ ls > /tmp/save.out
$ cat /tmp/save.out
a.out
cong.txt
def.conf
file.txt
more.txt
zebra.list
$

这次,我们加上 -C 选项:

$ ls -C > /tmp/save.out
$ cat /tmp/save.out
a.out cong.txt def.conf file.txt more.txt zebra.list
$

不进行重定向时,也可以使用 ls 的 -1 选项,得到的输出如下所示:

$ ls -1
a.out
Cong.txt
def.conf
file.txt
more.txt
zebra.list
$

这和最初使用重定向时的输出结果一样。

讨论

当你觉得自己已经理解重定向,试着将它用于简单的 ls 命令时,结果却不尽正确。这是怎么回事?

shell 的重定向功能意在对所有程序保持透明,因此程序无须编写特定代码来让自身的输出能够被重定向。当你用 > 将输出发送到别处时,shell 负责完成相关工作。但是,我们可以在程序中加入代码,判断输出何时被发往终端。然后,程序就能够针对不同情况进行处理,这也正是 ls 所做的。

ls 的作者认为,如果要向屏幕输出,那么用户可能希望按列输出(-C 选项),毕竟屏幕空间有限,寸土寸金。但作者同时也认为,如果重定向到文件,那么用户会希望一行显示一个文件名(-1 选项),这样一来,更容易实现一些有意思的事情(其他处理)。

酷客网相关文章:

  • Bash Shell输出保存到其他文件
  • Bash Shell保存命令输出
  • Bash Shell消除输出中的换行符
  • Bash Shell输出中加入格式控制

你可能感兴趣的:(bash)