运行 多个命令,但 运行 最后一个在后台
Run multiple commands, but run the last one in the background
我有 4 个命令要执行 运行:
sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
mongod &
我只想 运行 mongod 在后台运行,前提是上面的其他 3 个成功。但是当我将它输入 bash 时,它 运行 将整个事情作为一个后台任务。我如何只在后台制作 mongod
运行,并且仅当它到达它时?
使用父级:
sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
(mongod &)
要明确。无需尝试滥用语法来使用短路:
if \
sudo mkdir -p /data/db \
&& sudo chmod 755 /data/db \
&& sudo chown -R addison.pan: /data
then
mongod &
fi
要运行 一个或多个单独进程中的命令,请将该系列命令括在括号中。正如单一 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 & }
以上文档参考中均有描述。
您可以在 sudo
中 运行 多个命令,例如:
sudo sh -c 'mkdir -p /data/db && chmod 755 /data/db && chown -R <user>: /data' \
&& mongod &
我有 4 个命令要执行 运行:
sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
mongod &
我只想 运行 mongod 在后台运行,前提是上面的其他 3 个成功。但是当我将它输入 bash 时,它 运行 将整个事情作为一个后台任务。我如何只在后台制作 mongod
运行,并且仅当它到达它时?
使用父级:
sudo mkdir -p /data/db && \
sudo chmod 755 /data/db && \
sudo chown -R addison.pan: /data && \
(mongod &)
要明确。无需尝试滥用语法来使用短路:
if \
sudo mkdir -p /data/db \
&& sudo chmod 755 /data/db \
&& sudo chown -R addison.pan: /data
then
mongod &
fi
要运行 一个或多个单独进程中的命令,请将该系列命令括在括号中。正如单一 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 & }
以上文档参考中均有描述。
您可以在 sudo
中 运行 多个命令,例如:
sudo sh -c 'mkdir -p /data/db && chmod 755 /data/db && chown -R <user>: /data' \
&& mongod &