Shell命令行如何实现后台执行command1后自动运行command2?
当然可以实现!这里有几种适配你需求的Shell命令写法
你想要的是让耗时较长的command1在后台运行,等它完成后自动触发command2对吧?下面是几种常用的实现方式:
基础版:等待后台的command1完成后执行command2
直接用这条命令:command1 & wait && command2拆解一下逻辑:
command1 &:把command1放到后台运行,你可以继续使用终端做其他操作(不过wait会让当前会话暂时阻塞,直到后台的command1结束)wait:会暂停当前Shell进程,直到所有后台任务执行完毕&&:只有当command1成功退出(返回状态码为0)时,才会执行后续的command2。如果不管command1执行成功与否都要运行command2,把&&换成;即可:command1 & wait; command2
精准版:仅等待command1进程(避免其他后台任务干扰)
如果你当前Shell会话中还有其他后台进程在运行,不想让它们影响command2的触发时机,可以专门记录command1的进程ID(PID),只等待它完成:command1 & PID=$! # 将刚启动的后台进程PID保存到变量中 wait $PID && command2这里的
$!是Shell的特殊变量,会返回最后一个后台进程的PID,这样wait就只会监听command1的状态,不会被其他后台任务打断。额外补充:如果想让command1和command2并行执行
要是你其实希望command1后台运行的同时立刻启动command2(这应该不是你所说的“在此之后”的场景,但还是提一下供你参考),直接这样写就行:command1 & command2这种情况下两个命令会同时运行,互不等待对方完成。
内容的提问来源于stack exchange,提问作者codec
相关产品推荐
相关产品推荐

