在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 :(得分: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'
选项-x
,various references没有多大帮助,对于为什么sa gnome-terminal --help-all
选项具有相同的语义和不同的语法,没有很好的解释。