在终端我可以轻松获取命令的错误代码
> cat thisdoesntexist
cat: thisdoesntexist: No such file or directory
> echo $?
1
但是当我在新终端中运行命令时也这样做
> gnome-terminal -e "cat thisdoesntexist"
> echo $?
0
如何在第二种情况下获取命令的错误代码(以便返回1)?
答案 0 :(得分:3)
您可能必须依赖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具有阻止功能的额外好处。为简单起见,您可以使用常规文件,但要注意可能的竞争条件。