如何从bash shell运行程序而不在shell进程中运行

Sca*_*ass 2 shell bash

如果您从 bash shell 运行 say Nemo,则在结束 Nemo 进程之前,您将无法从该 shell 执行任何其他命令。

这就是我的问题。我希望能够运行其他命令而不必打开另一个 shell 并且不必结束已启动的进程。

Sté*_*las 11

exec Nemo
Run Code Online (Sandbox Code Playgroud)

不会Nemo 在shell子进程中运行,即会Nemo在shell的进程中执行,所以将shell替换为Nemo.

但看起来这不是你想要的。

看起来您在这里想要的是在单独的进程中运行的命令,但 shell在发出下一个提示之前不要等待该进程完成。

为此,您将使用:

Nemo &
Run Code Online (Sandbox Code Playgroud)

那是Nemo异步运行的。当它从交互式 shell 完成时,Nemo也会被置于后台,以防止从终端读取或在按下 Ctrl+C 时被 SIGINT 杀死。

请注意,该命令仍将位于 shell 的作业表中。您可以使用 将其放回前台fg。shell 也会在退出时尝试杀死它(至少在某些 shell 中)。

对于包括 在内的一些 shell bash,您还可以使用该disown命令告诉 shell 忘记它。使用zsh,您还可以将其启动为:

Nemo &!
Run Code Online (Sandbox Code Playgroud)

在后台启动它并立即否认它。