如何在后台放置子shell和相关命令?

Kar*_*arl 5 shell-script background-process subshell

在子 shell 中运行序列命令,如下所示:

(git pull;git rebase develop)&>/dev/null 
Run Code Online (Sandbox Code Playgroud)

我认为这会将子 shell 及其创建的所有子进程置于后台,并将控制权返回给用户。

但实际上,终端挂了一段时间,似乎是在等待子shell中的命令完成。

任何人都可以解释为什么会发生这种情况,以及做这种工作的正确方法是什么。

Kus*_*nda 4

如果您正在运行bashshell,则会&>/dev/null将标准输出和错误流重定向到/dev/null(与 相同>/dev/null 2>&1),但它不会将( ... )子 shell 作为异步进程运行。为此,您需要&在末尾添加额外的内容:

(git pull; git rebase develop) &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

ksh93没有这个功能,POSIX 中也没有这个功能。