2014-07-23 52 views
2

在一个bash脚本中,我用一个给出错误的命令启动一个新的终端。不过,我似乎并没有能够抓住这个错误代码: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中获取新终端中的错误。

+0

你为什么要这么做?除非你正在测试GNOME终端本身,否则你应该直接运行脚本,而不是通过终端。 – l0b0

+0

我正在尝试为应用程序(Docker)打开不同终端的BASH脚本。然而,我希望能够抓住任何错误。 – Pithikos

+0

你能给我更多的背景吗?我仍然不明白你为什么要使用终端,而不是仅仅运行脚本。 – l0b0

回答

1

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

关于你提到的第二个问题,你双quoted的命令,所以$?是之前运行它扩大。这应该工作:

gnome-terminal -x bash -c 'cat dksdamfasdlm; echo $?; sleep 2' 

PS:本-x选项不GNOME终端3.8.4的gnome-terminal --help-all,记录variousreferences没有多大帮助,而且也对为什么有一个-e选项具有相同的语义,并没有很好的解释不同的语法。