我在 Linux Mint 中的 Bash 中。如果我执行
{ echo 1 || >&2 echo "[ $? ]" ; } | echo
会打印一个空行。请注意,Bash 会将其解释echo
为内置命令。但如果我执行
{ /bin/echo 1 || >&2 echo "[ $? ]" ; } | /bin/echo
它输出
[ 141 ]
我们知道man bash
141 表示它接收到了信号 13,并且man 7 signal
表示生成了 SIGPIPE 信号。man 7 pipe
我们读到
[i]如果引用管道读取端的所有文件描述符都已关闭,则将
write(2)
导致为调用进程生成 SIGPIPE 信号。
因此,我得出结论,在第二种情况下,“所有引用管道读取端的文件描述符都已关闭”,无论它对 意味着什么/bin/echo
。但是为什么在 Bash 的情况下输出不同echo
?