在终端中,我可以轻松获取命令的错误代码
> cat thisdoesntexist
cat: thisdoesntexist: No such file or directory
> echo $?
1
但是当我在一个新的终端中运行命令时做同样的事情
> gnome-terminal -e "cat thisdoesntexist"
> echo $?
0
如何在第二种情况下获取命令的错误代码(以便返回 1)?
最佳答案
您可能必须依靠 fifo 在两个 shell 之间进行通信,因为 gnome-terminal
似乎不会传播退出状态。
sh$ TMPDIR=$(mktemp -d)
sh$ F=$TMPDIR/fifo
sh$ mkfifo $F
sh$ gnome-terminal -e 'bash -c "cat thisdoesntexist; echo $? > '"$F"'"'
sh$ cat $F
1
sh$ rm -rf $TMPDIR
请注意:Fifo 具有阻塞的额外好处。为简单起见,您可以使用常规文件,但要注意可能的竞争条件。
关于bash - 如何从新终端中的程序获取返回码? (巴什 "Inception"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24908104/