Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Unix cat命令、管道和标准输入/标准输出_Shell_Unix_Scripting_Pipe_Stdin - Fatal编程技术网

Shell Unix cat命令、管道和标准输入/标准输出

Shell Unix cat命令、管道和标准输入/标准输出,shell,unix,scripting,pipe,stdin,Shell,Unix,Scripting,Pipe,Stdin,有件事我不明白 工作原理:echo“akka”| cat 但这不会在控制台上产生“akka”:echo“akka”>cat 这甚至不起作用:cat

有件事我不明白

工作原理:
echo“akka”| cat

但这不会在控制台上产生“akka”:
echo“akka”>cat

这甚至不起作用:
cat


对我来说,它们应该是一样的。但是这3个命令似乎不同

您混淆了文件重定向和管道之间的区别

管道符号
|
用于将一个命令的输出传递到另一个命令

同时,
用于文件重定向

这些是非常不同的操作

示例1:

echo "akka" | cat
echo "akka" > cat
cat < echo "akka"
echo
命令具有输出
akka
,该输出通过管道传输到
cat
命令的标准输入。
cat
命令写入标准输出,因此在本例中,它打印
akka
。当然,这与简单地执行以下操作没有区别:

echo "akka"
示例2:

echo "akka" | cat
echo "akka" > cat
cat < echo "akka"
echo
命令具有输出
akka
。然后使用
,将此输出重定向到名为
cat
的文件中。在这种情况下,终端中没有显示输出,因为输出被放在文件中

示例3:

echo "akka" | cat
echo "akka" > cat
cat < echo "akka"
cat

这与前两个完全不同。这将运行从标准输入读取的
cat
命令。使用
管道和重定向是两件截然不同的事情。简而言之,非常简单:一个管道连接两个程序;重定向时,将重定向到(或从)文件。
将标准输出重定向到文件
echo“akka”>cat
工作正常:它在当前目录中创建一个名为
cat
的文件……和
cat
(与
cat“akka”相同)@charles在这种情况下,我实际上找不到合适的副本。如果你能找到,请提出建议。你是说这个问题问得不好吗?现在正在处理副本列表。@charles虽然链接的副本是相关的,但我觉得我的回答提供了一个更相关的讨论,涵盖了问题中的3个案例。我做了searc对于重复的问题,我发现,但我觉得它没有很好地解决这个问题,特别是OP提到的第三个案例。因此,我在这个案例中提供了一个答案。是的。在花了一点时间研究这个问题和它的前几个问题之间的差异之后,我确实认为答案在这里是合理的;就此而言,我有时,当存在重复的内容时,会添加一个社区wiki回答我自己,但不清楚如何应用重复内容。好的,谢谢。所以基本上“cat