![我们如何能够像 yes 一样传输无穷无尽的命令?](https://linux22.com/image/186157/%E6%88%91%E4%BB%AC%E5%A6%82%E4%BD%95%E8%83%BD%E5%A4%9F%E5%83%8F%20yes%20%E4%B8%80%E6%A0%B7%E4%BC%A0%E8%BE%93%E6%97%A0%E7%A9%B7%E6%97%A0%E5%B0%BD%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
据我所知,管道命令A
到命令B
将执行A
并将其输出作为B
输入。虽然有些命令是无限的,例如yes
,因此这些命令的执行时间是直到我们中断它们为止。他们的管道工作如何?
例子 :
yes | sudo dnf install pkg
答案1
尽管命令 A 可能会产生无穷无尽的输出,但命令 B 只会读取有限数量的输出。当命令 B 退出(或关闭其输入文件描述符)时,管道将被破坏。
此后,从命令 A 到管道的任何写入都会导致内核SIGPIPE
向命令 A 发送信号。默认操作SIGPIPE
是终止进程。