如何从新终端的程序中获取返回代码? (BASH“成立”)

时间:2014-07-23 10:33:21

标签: bash terminal error-code

在终端我可以轻松获取命令的错误代码

> cat thisdoesntexist
cat: thisdoesntexist: No such file or directory
> echo $?
1

但是当我在新终端中运行命令时也这样做

> gnome-terminal -e "cat thisdoesntexist"
> echo $?
0

如何在第二种情况下获取命令的错误代码(以便返回1)?

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具有阻止功能的额外好处。为简单起见,您可以使用常规文件,但要注意可能的竞争条件。