如何仅在前置命令执行成功后让mongod在后台运行?
嗨,我来帮你搞定这个bash命令的问题~
你当前的写法会把整个命令串都丢去后台,是因为bash里&会作用于整个由&&连接的命令组,而不是只针对最后一个mongod。要实现「前三条前台执行,全部成功后才让mongod单独后台跑」的需求,有两种实用的方法:
方法一:用if条件判断(可读性拉满)
这种方式逻辑特别清晰,谁看了都能明白只有前三个命令全部成功,才会启动后台的mongod:
if sudo mkdir -p /data/db && sudo chmod 755 /data/db && sudo chown -R addison.pan: /data; then mongod & fi
- 前三条命令会在当前shell前台依次执行,每一步都返回成功才会进入
then块 mongod &单独在后台启动,完全不影响前面命令的前台执行状态
方法二:一行式写法(用子shell包裹)
如果你偏爱紧凑的一行命令,可以用括号把mongod &包起来,创建一个子shell来运行后台任务,这样前面的命令依然在当前shell前台执行:
sudo mkdir -p /data/db && sudo chmod 755 /data/db && sudo chown -R addison.pan: /data && (mongod &)
- 括号
()会启动一个独立的子shell,mongod在这个子shell里后台运行 - 前三条命令始终在当前shell的前台执行,只有全部成功才会触发子shell里的后台任务
两种方法都能完美满足你的需求,个人更推荐第一种,因为逻辑直观,后期维护起来也省心。
内容的提问来源于stack exchange,提问作者Daniel Kaplan
相关产品推荐
相关产品推荐

