macos - 将输出传送到另一个延迟命令时如何暂停主命令
问题描述
我有两个自定义脚本来实现它们自己的任务,一个用于输出一些 URL(伪装成cat
下面的命令),另一个用于接收 URL 以通过网络请求解析它(伪装成sleep
下面的命令)。
这是原型:
情况1:
cat urls.txt | xargs -I{} sleep 1 && echo "END: {}"
输出是END: {}
和sleep
作品。
案例二:
cat urls.txt | xargs -I{} echo "BEGIN: {}" && sleep 1 && echo "END: {}"
输出是
BEGIN: https://www.example.com/1
BEGIN: https://www.example.com/2
BEGIN: https://www.example.com/3
END: {}
但似乎只有sleep
1秒。
Q1:我有点困惑,为什么会有这些输出?
Q2:是否有任何解决方案可以为每行输出执行完整的流水线xargs
延迟命令?cat
解决方案
您可以将命令放入单独的脚本中:
工人.sh
#!/bin/bash
echo "BEGIN: $*" && sleep 1 && echo "END: $*"
设置执行权限:
chmod +x worker.sh
并用 xargs 调用它:
cat urls.txt | xargs -I{} ./worker.sh {}
输出
BEGIN: https://www.example.com/1
END: https://www.example.com/1
BEGIN: https://www.example.com/2
END: https://www.example.com/2
BEGIN: https://www.example.com/3
END: https://www.example.com/3
在 BEGIN 和 END 之间,脚本休眠一秒钟。
推荐阅读
- java - 为什么我从数组 B 得到 0,但它在数组 A 上工作
- android - 是否可以通过 USB 集线器在两部安卓手机之间进行通信?
- d3.js - 更新 D3.js 树形图的数据
- c# - 使用 Entity Framework Core 进行表拆分。将表展平为主-详细信息
- python - python中的独立时间倒计时
- spring - Spring - 不持久记住我在应用程序重启时无法生存
- java - 如何从对象的 Arraylist 中获取子列表?
- macos - macOS High Sierra 10.13.6 上的一般编译问题
- php - 发现重复键时,WordPress会在日志中隐藏错误
- sql - Oracle SQL中与空字符串连接和强制转换函数有什么区别