首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使shell脚本中exec命令在不同进程中运行?

如何使shell脚本中exec命令在不同进程中运行?
EN

Stack Overflow用户
提问于 2018-08-23 01:04:40
回答 1查看 485关注 0票数 0

我正在使用这个图形用户界面应用程序GTKWave,它有一个启动脚本gtkwave,我已经将它添加到我的系统路径中。在上述脚本的末尾,有这样一行:

代码语言:javascript
复制
$EXEC "$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS

where $EXEC=exec

我的问题是,考虑到exec的工作方式,我的终端被图形用户界面进程“劫持”,这意味着我不能再运行任何命令,直到我关闭窗口,这是不理想的。

我现在通过在我的.bash_profile中添加这个函数来解决这个问题

代码语言:javascript
复制
function run-gtkwave ( ) { nohup gtkwave $1 &>/dev/null & }

虽然这是可行的,但它使得向gtkwave传递参数变得很困难。理想情况下,我可以在exec命令之前创建一个表单,但我不确定如何在bash中执行此操作。我知道&字符应该这样做,但是

代码语言:javascript
复制
$EXEC "$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS &

不会影响到它,也不会

代码语言:javascript
复制
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS &

代码语言:javascript
复制
("$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS) &

如何修改此行以在应用程序自己的进程中运行应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 03:36:04

通过将定义更改为以下内容,可以使run-gtkwave函数将参数传递给gtkwave

代码语言:javascript
复制
function run-gtkwave { nohup gtkwave "$@" &>/dev/null & }

由于使用nohup和输出重定向可以阻止终端被“劫持”,因此您可以通过在gtkwave中执行nohup重定向和输出重定向来修复该问题。(如果标准输入是终端,则nohup会将其从/dev/null重定向。)一种可能性是:

代码语言:javascript
复制
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS </dev/null &>/dev/null &

(我省略了$EXEC,因为我看不出同时使用exec&有什么意义。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51971885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档