Bash 复杂的管道依赖关系

2024-01-17

I'm trying to model a build concurrent pipeline in a single Bash script. I know I can use other tools, but at this point I'm doing it out of understanding 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:target 确保所有任务都被执行,即使文件名为a1, a2,...恰好存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 复杂的管道依赖关系 的相关文章

  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 编写 shell 脚本以 am 或 pm 表示法显示时间

    我正在尝试编写一个 shell 脚本 以上午或下午的形式显示时间 而不是使用 date 命令显示时间 我不知道我应该如何去做这件事 我想对于初学者来说 如何从日期命令中提取时间来操作它 我如何提取小时数来操纵它 您正在寻找的是 man st
  • 是否可以保证 WaveFront (OpenCL) 中的所有线程始终同步?

    众所周知 有WARP 在CUDA中 和WaveFront 在OpenCL中 http courses cs washington edu courses cse471 13sp lectures GPUsStudents pdf http
  • 如何防止 CMake 在构建时(而不是安装时)为共享库创建符号链接?

    我正在使用 CMake 在 Linux 上使用 Bullet3 构建一个项目 在构建整个解决方案时 它会构建附加了 SOVERSION 的 Bullet 输出库 并创建一个不带版本的符号链接 对于我的特定场景 我不喜欢这种行为 并且我不想编
  • 从sourceforge下载最新版本

    我正在尝试在 bash 脚本中从 Sourceforge 下载最新版本的graphicsmagick wget q https sourceforge net projects graphicsmagick files latest dow
  • rsync :递归同步所有文件,同时忽略目录结构

    我正在尝试创建一个 bash 脚本 用于将音乐从桌面同步到移动设备 桌面是源 有没有办法让rsync递归同步文件但忽略目录结构 如果从桌面删除了文件 我希望它也在设备上删除 我的桌面上的目录结构是这样的 Artist1 Artist1 ar
  • OS X 对 /usr/local/lib 的权限被拒绝

    我正在寻找有关权限问题的任何建议 直觉 线索 答案 自从我切换到新的 Macbook Pro 以来 这个问题一直困扰着我 这就是困境 某些程序在安装期间复制 usr local lib 下的库 并且在运行这些程序时出现崩溃 我认为这与此文件
  • 从文件开头开始 grep (grep -f )

    I use commands grep f file从文件中提取管道内容 但是 我只想在匹配字符串位于行开头时才提取 通常我使用grep string 但它不适用于grep f grep f file grep No such file o
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • Docker 容器可以访问 DNS,但无法解析主机

    我在运行 docker 容器时遇到一个有趣的问题 突然间 我无法从容器内解析 DNS 这是一个概要 一切都没有解决 apt get pip 一次性 ping 容器等正在运行docker run it dns 8 8 8 8 ubuntu p
  • CMake:使用其他平台的生成器。如何?

    如何使用 CMake 在 Linux 上生成 Visual Studio 项目文件 你不能 您必须在 Windows 上运行 CMake 才能为 Visual Studio 生成
  • Tk 初始化失败:无显示名称且无 $DISPLAY 环境变量

    我试图从 Ubuntu 终端调用 Centos 服务器上的工具 我收到以下错误 Tk 初始化失败 没有显示名称 也没有 DISPLAY 环境变量 请帮我解决这个问题 提前致谢 连接到你的 CentOS 机器ssh Y其中 每man ssh
  • 如何从 Linux 命令行打开 Sublime Text 2 文件到选项卡,而不是新窗口

    我有 ST2 设置 这样我就可以执行 sublime file txt 它将在 ST2 窗口中打开 但是我怎样才能让它在当前打开的窗口的新选项卡中打开呢 尝试 Sublime 命令行帮助 subl 帮助 Sublime Text 2 内部版
  • Goroutine 是如何工作的? (或者:goroutines 和操作系统线程的关系)

    其他 goroutine 如何在调用系统调用时继续执行 当使用 GOMAXPROCS 1 时 据我所知 当调用系统调用时 线程会放弃控制权 直到系统调用返回 Go 如何在不为每个阻塞系统调用 goroutine 创建系统线程的情况下实现这种
  • 检查 Linux 中给定进程的打开 FD 限制

    我最近有一个 Linux 进程 泄露 了文件描述符 它打开了文件描述符 但没有正确关闭其中一些文件描述符 如果我对此进行监控 我就可以提前得知该过程已达到其极限 有没有一种很好的 Bash 或 Python 方法来检查 Ubuntu Lin
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截

随机推荐

  • 如何将事件对象传递给命名函数

    我有一个用于单击事件的事件处理程序 事件处理程序是一个命名函数而不是匿名函数 如何将事件对象传递给这个命名函数 usual example sel click function ev do stuff which involves the
  • notifyDataSetChanged 不会刷新 RecyclerView

    我有一个奇怪的问题 我切换到RecyclerView from ListView我无法刷新或通知我的更改ListView 我尝试打电话Item this notifyDataSetChanged 以及其他刷新方法View但它不起作用 反而R
  • setImeOptions:为什么软键盘上不显示“完成”按钮?

    我尝试使用以下命令在软键盘上设置 完成 按钮input setImeOptions EditorInfo IME ACTION DONE 但 完成 按钮根本不显示在软键盘上 请问有什么建议吗 public void modif int po
  • 切换弹出窗口并在外部单击时切换它

    我有一个问题 我正在尝试制作一个弹出窗口切换toggleClass 不过 我还制定了一条从 StackOverflow 获得的规则 当在外部单击时 弹出窗口会消失 但是 当我单击登录按钮时 它会出现 但我无法再使用登录按钮使其消失 但我已经
  • 2D OpenGL 场景因大量重叠形状而变慢

    我正在使用 OpenGL 绘制 2D 形状 他们没有使用那么多多边形 我注意到我可以有很多很多的形状 只要它们不重叠 如果我在一个形状后面得到一个形状 等等 它真的开始滞后 我觉得我可能做错了什么 这是正常的吗 有没有办法解决这个问题 我不
  • 猫效应和异步 IO 细节

    这几天我一直在思考猫效应和 IO 我觉得我对这种效果有一些误解 或者只是我错过了它的要点 首先 如果IO可以取代Scala的Future 我们如何创建异步IO任务 使用IO shift Using IO async Is IO delay同
  • 将 pandas 中的多列除以另一列

    我需要将 DataFrame 中除第一列以外的所有列除以第一列 这就是我正在做的事情 但我想知道这是否不是 正确的 熊猫方式 df pd DataFrame np random rand 10 3 columns list ABC df B
  • ActiveRecord has_many 其中表 A 中的两列是表 B 中的主键

    我有一个模型 Couple 有两列 first person id and second person id和另一个模型 Person 其主键是person id并有专栏name 这是我想要的用法 including Person mode
  • 有开源的 WPF 仪表控件吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用数组设置 Excel 范围格式

    我过去曾使用变体数组来填充一系列 Excel 单元格 我想知道 有没有办法对单元格格式做同样的事情 我不想逐个单元格地进行操作 最好尽量减少获取 Excel 范围的调用次数 我主要按照兰斯的建议去做 但是 在某些情况下 我会使用我想要设置的
  • PHP Session 变量未保存

    我已经查看了有关会话变量未保存的所有问题 但没有看到我的问题 所以我要问它 我有一个表单 一旦提交 它就会在我的数据库中搜索该名称 初始表格位于第 1 页 在第 2 页上 我从第 1 页获取变量并像这样保存 searchTerm POST
  • EditText 多重编辑填充检查

    我正在创建一个项目 其中填充了 3 个编辑文本我想检查 3 个编辑文本中的任何一个是否应该填充 3 个编辑文本中的任何一个我知道如何检查所有 edittext 值中是否都有数据 private boolean validate edit1
  • MySQL 中的时间戳比日期时间列快多少?

    这包括两个问题 MySQL的时间戳字段真的比 order by 查询中的日期时间字段快吗 如果上述问题的答案是肯定的 那么速度能快多少 假设在一个有1亿行的表中 经常根据MySQL内部的时间戳字段对一堆100 200k行进行排序 排序时间的
  • 修复 Twitter Bootstrap 中的按钮大小

    I use 推特引导程序 https getbootstrap com 2 3 2 在我的网络应用程序中 我有一张有很多按钮的桌子 按钮的文本随着表行的当前状态而变化 在 Ajax 请求响应之后 我使用 Jquery 更改按钮文本 我的问题
  • Rails - 在控制器中存储 cookie 并从 Javascript、Jquery 获取

    是否可以在控制器中存储用户的 Cookie 或会话 并通过 JS 或 Jquery 访问它来获取 cookie Session值在服务器上可用 你可以这样设置它们在你的控制器中 http apidock com rails ActionCo
  • WPF - 自定义设计音量控制

    我使用 WPF 已经有一段时间了 我需要通过互联网创建以下控件 但找不到合适的 任何人都可以帮助如何实现此功能 单击控件时 值应该增加或减少 我发现我可以使用音量控制或滑块 但不清楚我应该使用什么 谢谢期待 我更喜欢使用进度条来显示此类内容
  • 如何在 Visual Studio 中添加高优先级 TODO 注释?

    添加这样的评论 TODO Refactor this code 在我可以查看的任务列表中创建一个任务等 有一列标记为 让您可以按优先级对这些任务进行排序 如何设置特定任务的优先级 任务的优先级取决于您用来标记它的关键字 您可以通过转到 工具
  • 克隆 TypeScript 对象

    我有一个打字稿课程 export class Restaurant constructor private id string private name string public getId string return this id p
  • 如何从 tmux 会话获取 stdout 和 stderr?

    我正在linux系统中编写一个示例python程序 我在用tmux https linux die net man 1 tmux创建会话并在 tmux session 中执行另一个脚本 我想将 stdout 和 stderr 从 tmux
  • Bash 复杂的管道依赖关系

    I m trying to model a build concurrent pipeline in a single Bash script I know I can use other tools but at this point I