bash - 如何从新终端中的程序获取返回码? (巴什 "Inception")

标签 bash terminal error-code

在终端中,我可以轻松获取命令的错误代码

> cat thisdoesntexist
cat: thisdoesntexist: No such file or directory
> echo $?
1

但是当我在一个新的终端中运行命令时做同样的事情

> gnome-terminal -e "cat thisdoesntexist"
> echo $?
0

如何在第二种情况下获取命令的错误代码(以便返回 1)?

最佳答案

您可能必须依靠 fifo 在两个 shell 之间进行通信,因为 gnome-terminal 似乎不会传播退出状态。

sh$ TMPDIR=$(mktemp -d)
sh$ F=$TMPDIR/fifo
sh$ mkfifo $F
sh$ gnome-terminal -e 'bash -c "cat thisdoesntexist; echo $? > '"$F"'"'
sh$ cat $F
1
sh$ rm -rf $TMPDIR 

请注意:Fifo 具有阻塞的额外好处。为简单起见,您可以使用常规文件,但要注意可能的竞争条件。

关于bash - 如何从新终端中的程序获取返回码? (巴什 "Inception"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24908104/

相关文章:

ios - 将 API 错误代码映射到 iOS 中的本地化字符串

c++ - 在 C++ 库中有错误代码选项以提高性能

macos - 没有备份文件的 SED

linux - 在 Raspbian/etc/profile 脚本中找不到命令

node.js - gulp,找不到命令 - 之前工作正常,然后突然停止

shell - VSCode 终端 : How to display execution time?

iis - 每个 sc-win32-status 代码表示什么?

linux - 如何在 expect 中设置 bash 变量或将变量从 expect 返回到 bash

linux - 在一行中使用 'su' 命令登录

linux - Bash 命令记录器