gpt4 book ai didi

bash - 运行多个命令,但在后台运行最后一个

转载 作者:行者123 更新时间:2023-11-29 09:22:40 27 4
gpt4 key购买 nike

我有 4 个要运行的命令:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
mongod &

如果上面的其他 3 个成功,我只想在后台运行 mongod。但是当我将其输入 bash 时,它会将整个过程作为一个后台任务运行。我如何才能让 mongod 在后台运行,并且只有当它到达时才运行?

最佳答案

要在单独的进程中运行一个或多个命令,请将该系列命令括在括号中。正如单一 Unix 规范中所指定的那样,§2.9.4 “Compound Commands” :

( compound-list )

Execute compound-list in a subshell environment […]

要将一个或多个命令分组到相同 shell 进程中,请将该系列命令括在大括号中:

{ compound-list ; }

Execute compound-list in the current process environment. […]

对于任何 POSIX shell 都是如此(所以它是 also works in Bash )。

所以你的例子可以改成:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
( mongod & )

这可能很好,因为您希望分离 mongod 进程。另一方面,更一般的答案是将命令列表分组相同的 shell 进程中:

sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
{ mongod & }

这两个都在上面的文档引用中进行了描述。

关于bash - 运行多个命令,但在后台运行最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com