如何在不同进程中的 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
的工作方式,我的终端是 "hijacked" GUI 进程,这意味着我无法 运行 更多命令,直到我关闭 window,这并不理想。
我目前通过将这个函数放在我的 .bash_profile
:
中来解决这个问题
function run-gtkwave ( ) { nohup gtkwave &>/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
和输出重定向停止终端为 "hijacked",您可以通过执行 nohup
重定向和在那里输出重定向。 (如果标准输入是终端,nohup
将它从 /dev/null
重定向。)一种可能性是:
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS </dev/null &>/dev/null &
(我省略了 $EXEC
,因为我看不出同时使用 exec
和 &
有任何意义。)
我正在使用这个 GUI 应用程序 GTKWave,它有一个启动脚本 gtkwave
,我已将其添加到我的系统路径中。在所述脚本的最后,有这一行:
$EXEC "$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS
其中 $EXEC=exec
我的问题是,考虑到 exec
的工作方式,我的终端是 "hijacked" GUI 进程,这意味着我无法 运行 更多命令,直到我关闭 window,这并不理想。
我目前通过将这个函数放在我的 .bash_profile
:
function run-gtkwave ( ) { nohup gtkwave &>/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
和输出重定向停止终端为 "hijacked",您可以通过执行 nohup
重定向和在那里输出重定向。 (如果标准输入是终端,nohup
将它从 /dev/null
重定向。)一种可能性是:
"$bundle_contents/MacOS/$name-bin" $* $EXTRA_ARGS </dev/null &>/dev/null &
(我省略了 $EXEC
,因为我看不出同时使用 exec
和 &
有任何意义。)