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

BASH从子终端获取父终端中的错误代码?,bash,process,parent-child,error-code,gnome-terminal,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

在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"
输出(在新端子上):


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

似乎启动后GNOME终端会立即退出,如果运行例如
GNOME终端-x sleep 10
,这一点很明显。因为它不等待命令完成,所以返回代码不可能是命令的返回代码。我在
gnome终端中找不到任何选项——帮助所有人将进程保持在前台

关于第二个问题,您已经将命令加倍,因此在运行它之前会展开
$?
。这应该起作用:

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

PS:GNOME Terminal 3.8.4的
GNOME Terminal--help all
,没有记录
-x
选项,没有太多帮助,也没有很好的解释为什么有一个
-e
选项具有相同的语义和不同的语法。

为什么要这样做?除非您正在测试GNOME终端本身,否则您应该直接运行脚本,而不是通过终端。我正在尝试创建一个BASH脚本,为应用程序(Docker)打开不同的终端。然而,我希望能够捕捉到任何错误。你能提供更多的背景资料吗?我仍然不明白为什么你想使用终端而不仅仅是运行脚本。这是一个复杂的场景。我想从终端运行此脚本。脚本应该打开一个新的终端,该终端将连接到正在运行的VM。然后,父终端也应该连接到VM。但是,如果启动的终端无法成功连接到VM,则脚本应立即退出,而不是尝试连接到VM。您可以将第一个连接设置为后台,然后在同一脚本中进行两个连接,而无需生成单独的终端。
gnome-terminal -x bash -c 'cat dksdamfasdlm; echo $?; sleep 2'