BASH从子终端获取父终端的错误代码?

时间:2014-07-23 11:19:17

标签: bash process parent-child error-code gnome-terminal

在bash脚本中,我使用发出错误的命令启动一个新终端。但是,我似乎无法获取该错误代码:

#! /bin/bash
gnome-terminal -x bash -c "cat dksdamfasdlm"
echo $?

输出:

0

所以我得到gnome-terminal命令的错误代码而不是cat命令。我得到的一个建议是用代码创建一个文件并从父bash中读取。问题是我似乎仍然无法读取错误代码:

#! /bin/bash
gnome-terminal -x bash -c "cat dksdamfasdlm; echo $?; sleep 2"

输出(在新终端上):

cat: dksdamfasdlm: No such file or directory
0

为什么?关于如何解决这个问题的一些建议?我只想以某种方式从父bash中获取新终端中的错误。

1 个答案:

答案 0 :(得分:1)

似乎 GNOME终端在启动后立即退出,如果您运行示例gnome-terminal -x sleep 10,这很明显。由于它不会等待命令完成,因此返回代码不会是命令的返回代码。我在gnome-terminal --help-all中找不到任何选项来保持流程处于前台。

关于您的第二个问题,您已加倍 - quoted该命令,因此{<1}}在运行之前已展开。这应该有效:

$?

PS:GNOME终端3.8.4中没有记录gnome-terminal -x bash -c 'cat dksdamfasdlm; echo $?; sleep 2' 选项-xvarious references没有多大帮助,对于为什么sa gnome-terminal --help-all选项具有相同的语义和不同的语法,没有很好的解释。