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

GNU Parallel中--nonall与--onall及--delay交互问题咨询

GNU Parallel --nonall/--onall 区别及与--delay的交互问题

1. --nonall 与 --onall 的核心区别

二者的差异核心在于是否处理命令中的占位符,以及对重复输入的执行逻辑:

  • --onall:针对每一个输入项独立执行命令,若命令包含占位符(如{}),会将占位符替换为对应输入项;即使输入项重复,也会严格执行对应次数。
  • --nonall:强制忽略命令中的所有占位符,直接执行原始命令;当命令无占位符时,针对远程主机场景会自动对重复输入去重(本地未指定-S时可能仍重复执行,但核心逻辑是不做占位符替换)。

你测试的echo "1"不含占位符,所以两种选项都会对每个输入项执行一次命令,结果自然一致。换成带占位符的命令就能看到差异:

# --onall替换占位符,输出a、a、a
parallel --onall --jobs 1 echo {} ::: a a a
# --nonall忽略占位符,输出{}、{}、{}
parallel --nonall --jobs 1 echo {} ::: a a a

2. --delay 与 --nonall 无交互效果的原因

--delay的作用是在启动独立作业之间添加等待时长,但--nonall的执行逻辑会跳过作业的独立化处理:

  • 使用--nonall且命令不含占位符时,GNU Parallel会将所有输入项对应的执行视为同一类无差异作业,内部优化为批量启动,不会在它们之间插入--delay指定的等待时间。
  • 而--onall会将每个输入项对应的执行视为完全独立的作业(即使命令内容相同),因此会严格按照--delay设置,在每个作业启动前等待指定时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:57:45