管道的正式定义是左文件的STDOUT将立即管道到右侧文件的STDIN,我有两个文件,hello.txt和human.txt。cat hello.txt返回Hello,cat human.txt返回I am human.Now,如果我做了cat hello.txt | cat human.txt,难道不应该返回Hello I am human吗?相反,我看到command not found.I新来shell scripting.Can,有人解释了吗?
发布于 2016-07-08 19:29:50
背景:管道安排左边命令的输出(即写入FD 1的内容,stdout)作为输入到右边的命令( FD 0,stdin)。它通过将进程连接到“管道”或FIFO,并同时执行它们来做到这一点;尝试从FIFO读取进程将等待到另一个进程写了什么,而向FIFO写入的尝试将等到另一个进程准备好读取为止。
cat hello.txt | cat human.txt...feeds将hello.txt的内容写入cat human.txt的stdin中,但cat human.txt并不是从stdin读取;而是由命令行参数指示只从human.txt读取。
因此,cat human.txt的stdin上的内容将被忽略,永远不会读取,cat hello.txt在cat human.txt退出时接收到SIGPIPE,之后也会退出。
cat hello.txt | cat - human.txt...by对比将首先从stdin读取第二个cat (您还可以在许多操作系统(包括Linux)上使用/dev/stdin代替- ),然后从文件中读取。
发布于 2016-07-08 19:27:04
您不需要输送它们,而是可以从多个文件中读取,如下所示,这将反过来连接两个文件内容的内容。
cat hello.txt human.txt|通常用于将第一个命令的输出输入到管道中的第二个命令。在本例中,具体而言,您的第二个命令是从文件中读取,因此不需要使用管道。如果你愿意,你可以像
echo "Hello" | cat - human.txt发布于 2016-07-08 20:02:37
首先,命令将不会出现错误,它将打印i,即human.txt的内容。
是的,你对管道的定义是正确的,但是在管道的右边应该有一些命令。如果该命令用于接收输入并提供输出,而不是提供输出,则该命令将执行自己的行为。
但是这里有一个命令,即右边的cat human.txt,但是它会打印自己的内容,并且不会对接收到的输入进行操作。
而且,当您编写类似cat的hello.txt / human.txt bash时,会出现此错误: human.txt: human.txt:命令未找到
https://stackoverflow.com/questions/38274012
复制相似问题