如何在shell脚本中启动程序并使脚本继续运行,即使程序仍然打开

8
我正在使用Ubuntu上的bash。我想要一个shell脚本来启动一个程序,并且继续执行下一行,即使该程序尚未终止。
5个回答

9

在命令后添加 & 将其放入后台执行。

例如:

/path/to/foo    
/path/to/bar     # not executed untill foo is done


/path/to/foo &    # in background
/path/to/bar &    # executes as soon as foo is started

关于作业控制,可以在这里这里获取更多信息。


4
使用类似这样的命令(my-long-running-process &),可以将脚本作为单独的进程在后台运行。

3

您必须将该进程在后台运行,但是您必须先启用作业控制。否则,如果需要,请无法终止或将该进程带到前台。

要启用作业控制,请执行以下操作:

set -m

运行一些后台任务,请执行以下命令:

task &

要操作后台任务,请使用jobspec语法(%[n])。例如,要杀死最后启动的进程,请执行:

kill %

请注意,只有在实际运行脚本时才需要启用作业控制(如问题所述)。如果是交互式运行,则默认已启用作业控制。 bash的手册在JOB CONTROL章节中提供了更多信息。

在我看来,这个答案似乎是最好的:在使用bash 5.2时,"/path/to/foo &"本身不起作用,直到我首先添加了"set -m"。 - Asta86

1

0
如果你已经知道&将命令放在后台运行,但仍然在这里查看,可能是因为你的终端在脚本执行后没有再次打印提示符。或者更准确地说,它打印了提示符,但是你启动的应用程序在终端中输出了一些内容。 例如,这个脚本。
#!/usr/bin/bash
firefox --new-instance -P Something &

或者选择这个,正如@alecov所建议的
#!/usr/bin/bash
set -m
firefox --new-instance -P Something &

在gnome-terminal(Ubuntu 23.10)中将会给出这个。
laurent@laurent-GL73-8SD:~/redacted$ ./fire.sh 
laurent@laurent-GL73-8SD:~/redacted$ Gtk-Message: 22:35:26.454: Not loading module "atk-bridge": The functionality is provided by GTK natively. Please try to not load it.

(firefox:47696): Gtk-WARNING **: 22:35:26.571: GTK+ module /snap/firefox/3289/gnome-platform/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so cannot be loaded.
GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported.
Gtk-Message: 22:35:26.571: Failed to load module "canberra-gtk-module"

(firefox:47696): Gtk-WARNING **: 22:35:26.573: GTK+ module /snap/firefox/3289/gnome-platform/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so cannot be loaded.
GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported.
Gtk-Message: 22:35:26.573: Failed to load module "canberra-gtk-module"
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.

如果你想要一个干净的提示符,你需要再次按下回车键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接