You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本:如何在并行命令结束后分别执行对应后续命令

解决并行任务结束后触发对应后续命令的Shell方案

作为Shell新手,你需要的是让每个Python命令完成后立刻执行对应的后续命令,同时保持初始的三个命令并行运行。这里有个简单且易理解的实现方式:

核心思路:子shell后台执行任务组

把每组「command_XA → 等待结束 → command_XB」打包成一个子shell,然后让这个子shell后台运行。这样三个子shell会同时启动,各自内部的命令是顺序执行的——只有当command_XA完全结束,才会执行对应的command_XB,完全符合你的需求。

完整脚本示例

#!/bin/bash

# 第一组任务:command_1A结束后自动执行command_1B
(
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 启动command_1A"
    python /path/to/your/command_1A.py  # 替换为实际的command_1A命令
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] command_1A完成,启动command_1B"
    python /path/to/your/command_1B.py  # 替换为实际的command_1B命令
) &

# 第二组任务
(
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 启动command_2A"
    python /path/to/your/command_2A.py
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] command_2A完成,启动command_2B"
    python /path/to/your/command_2B.py
) &

# 第三组任务
(
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 启动command_3A"
    python /path/to/your/command_3A.py
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] command_3A完成,启动command_3B"
    python /path/to/your/command_3B.py
) &

# 可选:等待所有后台任务全部完成后再结束脚本
wait
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 所有任务执行完毕"

关键细节解释

  • 子shell:用()包裹的命令会在独立的子shell中执行,内部的命令是顺序执行的——只有前一条命令退出,才会执行下一条。
  • 后台运行:每个子shell末尾的&会让它在后台启动,三个子shell同时运行,所以初始的三个command_XA是并行执行的。
  • wait命令:脚本末尾的wait会等待所有后台进程结束后再退出脚本,如果不需要等待全部任务完成,可以去掉这一行。

进阶:处理命令失败的情况

如果需要在command_XA执行失败时跳过对应的command_XB,可以在子shell中加入状态判断:

(
    echo "启动command_1A"
    python command_1A.py
    # 检查上一条命令的退出状态(0为成功,非0为失败)
    if [ $? -eq 0 ]; then
        echo "command_1A成功,启动command_1B"
        python command_1B.py
    else
        echo "command_1A执行失败,跳过command_1B"
    fi
) &

这个方案不需要手动管理进程ID,逻辑清晰,非常适合Shell新手快速实现需求。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:57:54