我在 linux 终端上尝试某些命令,但我无法理解以下命令的输出:
wc < sfddfs |& wc
sfddfs: No such file or directory.
0 0 0
这里的 sfddfs 是一个不存在的文件。为什么它给出输出 0 0 0.
当sfddfs的文件内容传递给wc时,发现文件不存在,会给出错误输出(写在StdError上),通过管道传递给下一个wc。那么我们不应该用 StdError 的输出来计算吗?即1 6 34
最佳答案
与:
wc < nosuchfile
这不是 wc
提示丢失的文件,而是您正在运行的 shell。 shell 正在尝试打开 nosuchfile
以便它可以将它连接到标准输入文件句柄,而 wc
甚至不知道发生了什么 - 据就其而言,来自终端的标准输入或从文件重定向的标准输入应该没有区别。
这种连接尝试发生在 wc
程序实际加载到进程空间之前很久,因此 shell 会报告错误。而且,事实上,wc
在那种情况下甚至没有运行,您可以通过以下方式确认:
( echo X ) < nosuchfile
没有 X
在这里输出,因为永远不会执行回显它的子 shell。一个更明显的例子是:
sleep 60 < nosuchfile
显然不会休眠 60 秒。
并且,因为在这种情况下 wc
没有运行,所以完整命令序列中的 second wc
接收到一个空流,提示它给你 0 0 0
作为输出。
关于linux - 终端中命令输出的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26353317/