我刚刚学习shell命令;更具体地说,我正在学习管道。
现在我无法区分以下命令:ls | sort file.txt
和sort file.txt
。显然,应该是有区别的。
请有人能解释一下发生了什么事吗?
答案1
这两个命令的可见结果ls | sort file.txt
是sort file.txt
相同的:
sort file.txt
按字典顺序对行进行排序file.txt
并输出结果。
ls | sort file.txt
调用ls
以生成当前目录中的名称列表。该列表将发送至sort file.txt
.由于sort
是从 读取file.txt
,它将忽略来自 的名称列表ls
,而是生成 的排序内容file.txt
作为输出。的输出ls
被丢弃,因为sort
在本例中没有从其标准输入读取。
您可能想使用ls | sort
它来对输出行进行排序ls
(本来已经排序)。 sort
会读取 的输出,因为它没有给出任何特定的文件名来读取,因此正在从其标准输入流(通过管道ls
连接到 的输出流)读取。ls
但请注意,使用需要文本行的工具可能无法处理 Unix 文件名,因为这些文件名可能包含换行符。