除了创建 tmp 文件(显然)之外,cmd1 > tmp && cmd2 < tmp
和之间有什么区别?cmd1 | cmd2
如果我对管道的理解是正确的,我希望cmd2
从标准输入中读取两种情况下的输出cmd1
,所以我期待这两种情况的行为相同。
然而,对于这个读取标准输入的 go 程序,它与管道一样工作,但对于第二种形式,它就像没有收到任何输入一样。
除了创建 tmp 文件(显然)之外,cmd1 > tmp && cmd2 < tmp
和之间有什么区别?cmd1 | cmd2
如果我对管道的理解是正确的,我希望cmd2
从标准输入中读取两种情况下的输出cmd1
,所以我期待这两种情况的行为相同。
然而,对于这个读取标准输入的 go 程序,它与管道一样工作,但对于第二种形式,它就像没有收到任何输入一样。
Go 程序似乎明确测试标准输入是否为管道,如果不是,则退出并显示诊断消息:
两个命令行之间的另一个区别是,使用管道,两个命令同时运行。左边的命令是写,右边的命令是读。如果一个对另一个来说太慢(在读/写方面),较快的程序将暂时阻塞,直到较慢的程序赶上。
在两个命令
&&
中间运行的情况下,它们显然是一个接一个地运行。在第一个命令完成并以零退出状态终止之前,第二个命令不会启动。