【问题标题】:How to get return code from a program in a new terminal? (BASH "Inception")如何从新终端中的程序获取返回码? (BASH“盗梦空间”)
【发布时间】:2014-09-14 11:55:38
【问题描述】:

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

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

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

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

第二种情况下如何获取命令的错误码(使其返回1)?

【问题讨论】:

    标签: bash terminal error-code


    【解决方案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 具有被阻塞的额外好处。为简单起见,您可以使用常规文件,但请注意可能的竞争条件。

    【讨论】:

    • 谢谢。为了简单起见,我将使用我认为的常规文件。我只是想知道为什么gnome-terminal -x bash -c "cat thisdoesntexist; echo $?" 没有正确回显..
    • 很高兴为您提供帮助。两件事:(1)先进先出具有阻塞的额外好处。为简单起见,您可以使用常规文件,但要注意可能的竞争条件。 (2) 在您的命令中,您使用 双引号 "。所以$? 实际上在命令中被替换为它在主机shell 之前 执行它的值。这就是我使用简单引号 (') 的原因。
    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2019-10-13
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多