bash - 如何使shell脚本中的exec命令在不同的进程中运行?
问题描述
我正在使用这个 GUI 应用程序 GTKWave,它有一个启动脚本,gtkwave
我已将它添加到我的系统路径中。在所述脚本的最后,有这一行:
$EXEC "$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS
在哪里$EXEC=exec
我的问题是,鉴于exec
工作原理,我的终端被 GUI 进程“劫持”,这意味着在关闭窗口之前我无法运行任何命令,这并不理想。
我目前通过将此功能放在我的.bash_profile
:
function run-gtkwave ( ) { nohup gtkwave $1 &>/dev/null & }
虽然这可行,但很难将参数传递给gtkwave
. 理想情况下,我可以在该 exec 命令之前创建一个表单,但我不确定如何在 bash 中执行此操作。我知道&
角色应该这样做,但是
$EXEC "$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS &
没有削减它,也没有
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS &
或者
("$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS) &
如何修改此行以在其自己的进程中运行应用程序?
解决方案
您可以run-gtkwave
通过gtkwave
将定义更改为:
function run-gtkwave { nohup gtkwave "$@" &>/dev/null & }
由于使用nohup
和输出重定向会阻止终端被“劫持”,因此您可以gtkwave
通过在那里进行nohup
重定向和输出重定向来解决问题。(如果标准输入是终端,nohup
则从 . 重定向它/dev/null
。)一种可能性是:
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS </dev/null &>/dev/null &
(我省略了,$EXEC
因为我看不出将exec
and&
一起使用有什么意义。)
推荐阅读
- mongodb - 在 mongodb 中组合查询输出
- pug - 玉到ejs的转换形式是什么
- c# - 构建在发布模式下使用 TextTemplatingSession 的 .NET 时出现问题
- python - TypeError: startfile: filepath 应该是字符串、字节或 os.PathLike,而不是 _io.TextIOWrapper
- c++ - C++ 绑定(已弃用)
- database - MongoDB:我如何检索一组过滤的结果和一个在被计数之前以不同方式过滤的相关集合?
- r - 如何避免在 R 语言中构建投资组合时的典型错误
- android - 预期 BEGIN_ARRAY 但在第 1 行第 2 列出现 BEGIN_OBJECT 路径错误,使用改造应用程序和弹簧启动
- python - 如何通过子标签中的文本定位标签
- android - 将 Api 请求从 Android 发送到 Localhost