gpt4 book ai didi

linux - Bash 复杂的管道依赖

转载 作者:可可西里 更新时间:2023-11-01 11:45:08 25 4
gpt4 key购买 nike

我正在尝试在单个 Bash 脚本中为构建并发管道建模。我知道我可以使用其他工具,但目前我是出于对 Bash 的理解才这样做的。 Here's a diagram of the task flow that I'm trying to model in Bash.

并行安排作业很容易,最后等待所有作业也很容易。但是我想通过在任务 A.1 和任务 X 之后立即触发任务 A.2 来让它运行得更快。为了让我自己更难,任务 A.1 和任务 A.2 中的代码是相关的和顺序的,所以如果我也能保持代码顺序就好了。

#!/usr/bin/bash

{
echo "Task X"
} &
DEPENDENCY=$!

{
echo "Task A.1"
wait "${DEPENDENCY}"
echo "Task A.2"
} &

{
echo "Task B.1"
wait "${DEPENDENCY}"
echo "Task B.2"
} &

wait

这正是我想要的,但它不起作用,因为子进程不能互相等待——这是有道理的——但我希望我能以跨平台的方式实现它。

我实际上有这个工作,但我无法保留 *.1 和 *.2 部分的代码

此外,如果这可以在 OSX 和 Linux 上运行,那就太好了。我希望 Bash 专家可以插话并展示一种在 Bash 中表达这一点的简洁方法。

最佳答案

正如问题的评论所指出的,以下 Makefile 等同于您的 shell 脚本(但不涉及文件系统)

.PHONY: a1 a2 b1 b2 x

all: a2 b2

a1:
@echo "Task A.1"

b1:
@echo "Task B.1"

x:
@sleep 1.5; echo "Task X"

a2: a1 x
@echo "Task A.2"

b2: b1 x
@echo "Task B.2"

尝试使用 make -j5 来允许五个并行线程。它需要 GNU make,它适用于现有的每个平台,即使它可能不是默认分发的。初始 .PHONY: 目标确保即使名为 a1a2 ... 的文件碰巧存在,所有任务也会执行。

关于linux - Bash 复杂的管道依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834884/

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