如何获取命令的退出代码而不是xterm的退出代码?

8
如果我使用xterm这样的命令(在我的情况下是另一个脚本)进行调用:
xterm -e sh second.sh
< p > 在 xterm 返回后,$? 中的值是 xterm 的退出状态码(通常为 0),而不是我的脚本。< /p > < p > 有没有办法获取我的脚本的退出状态码?< /p >
1个回答

8
你可以像这样操作:
statusfile=$(mktemp)
xterm -e sh -c 'yourcommand; echo $? > '$statusfile
status=$(cat $statusfile)
rm $statusfile
yourcommand 的退出状态现在存储在变量 status 中。

2
+1. 看起来没有办法让 xterm 直接报告命令的状态。 - Fred Foo
为了测试,我创建了一个只包含“exit 0”的脚本。然后我调用这个脚本来代替你的命令。退出代码始终为127。如果我将你的命令替换为“sleep 10”,那么退出代码就是正确的:S - neildeadman
这个可以用,谢谢。但是我不理解语法。为什么是 echo $? > '$statusfile?重定向(>)是 sh 的一部分,要重定向的文件并没有在那里写,而是作为 xterm 的一部分? - Zvika
@Zvika 变量 $statusfile 包含临时文件的文件名,shell 需要在将其作为 xterm 的 -c 参数的一部分之前进行扩展。请注意,'$statusfile 之间没有空格,这意味着 shell 将扩展的 $statusfile 连接到 'yourcommand; echo $? > '。此外,我会写成 "$statusfile",以防止 shell 解释 $statusfile 中的任何内容。另一种编写方式是:"yourcommand; echo \$? > $statusfile" 或更好的方式是 "yourcommand; echo \$? > '$statusfile'" - Bodo Thiesen
如果我需要将一些变量传递到xterm中,但单引号不是一个选项怎么办? - user466130

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接