我一直在尝试创建一个脚本,以便能够将某些东西作为后台进程启动。我在 Google 上看到的常用方法(&、disown 等)都会导致当前终端显示我启动的后台进程的输出、要求我在当前终端中执行额外操作、无法关闭终端等。
因此,我想编写一个名为 bgp 的简单命令来启动后台进程。为此,我启动了一个新的终端实例,然后从该实例启动一个运行该进程的脚本,然后立即退出第二个终端实例。第一个 bgp.sh 脚本是:
bash -c 'gnome-terminal -x nohup bash ~/scripts/bgp_exec.sh $1 &'
那么第二个bgp_exec.sh是:
nohup '$1' & exit
我将其分成两个文件,因为我找不到使用引号在一行上正确格式化所有内容的方法。
问题是,第一个脚本中的 $1 是例如 bconf-editor,但在第二个脚本中它什么也不是。更奇怪的是,如果我将第一个脚本更改为:
bash -c 'gnome-terminal -x nohup bash ~/scripts/bgp_exec.sh bconf-editor &'
然后在第二个脚本中$1正确地为bconf-editor。
为什么会这样?为了解决这个问题,我刚刚做了以下事情:
rm bgp_exec.sh
echo "nohup '$1' & exit" >> bgp_exec.sh
bash -c 'gnome-terminal -x nohup bash ~/scripts/bgp_exec.sh $1 &'