我正在使用这个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) &
如何修改此行以在其自己的进程中运行应用程序?
答案 0 :(得分:1)
您可以通过将定义更改为以下内容,使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
和&
时看不到任何意义。)