繁体   English   中英

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

[英]How to make exec command in shell script run in different process?

我正在使用这个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和输出重定向可以防止终端被“劫持”,因此您可以通过执行nohup重定向和在那里的输出重定向来解决gtkwave的问题。 (如果标准输入是终端,则nohup/dev/null重定向它。)一种可能是:

"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS </dev/null &>/dev/null &

(我省略了$EXEC因为在同时使用exec&时看不到任何意义。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM