2.7 保存 ls 命令的输出

2.7 Saving  Output from the Is Command

问题

你尝试使用重定向保存 ls 命令的结果,但当你查看结果时,发现格式却不是你想要的。

解决方案

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

以下为 ls 命令展示目录内容时的输出:

但当我们想要把结果重定向到一个文件时,我们发现文件的内容却是每个结果占一行,就像下面这样:

这一次我们使用 -C 选项:

另外,如果我们使用 ls 命令并重定向输出时附带 -l 选项,则我们得到的输出文件类似如下结果:

这次输出就跟最初尝试重定向时的结果相匹配了。

讨论

当你初步理解重定向功能时,你想在简单的 ls 命令上尝试,却发现结果没能如愿。这是怎么回事儿呢?

Shell 的重定向对所有程序都是透明的,因此程序不需要特殊代码就可以使其输出可重定向。当你使用 “>” 符号将输出送到别的地方时,Shell 将接管这一任务。但事实证明,可以给程序添加代码以确定当前输出是否为终端(请参阅 man isatty)。然后,程序在这两种状态下的行为可能表现不同 —— 这也就是为什么 ls 会出现以上这种状况。

ls 的作者指出,当你的输入想要展示在屏幕上时,因为屏幕空间有限,你可能想要柱状输出( -C 选项)。但是当你想要重定向到文件时,你想要的是每个文件一行(-l 选项),之后你可以根据输出做一些更有趣的事儿,毕竟每行一个文件名更易于处理。

参见

关于 “2.7 保存 ls 命令的输出” 的 1 个意见

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据