如何用GNU Parallel对mycommand执行0-100参数扫描并生成命令文件?
用GNU Parallel遍历参数并生成命令文件
没问题,这事儿用GNU Parallel就能一步搞定——既帮你遍历variable_arg从0到100的所有取值,还能把所有生成的独立命令保存到文件里。我直接上实用命令,再给你拆解细节:
核心命令(仅生成命令文件)
seq 0 100 | parallel --dry-run "mycommand --fixed arg 5 --variable_arg {}" > all_commands.txt
各部分作用拆解
seq 0 100:生成0到100的所有整数,作为variable_arg的取值来源;parallel --dry-run:--dry-run是关键参数,它让Parallel只输出要执行的命令,不会实际运行mycommand,完美匹配你生成命令列表的需求;"mycommand --fixed arg 5 --variable_arg {}":这里的{}是Parallel的占位符,会被seq输出的每个数值逐一替换;> all_commands.txt:把所有生成的命令重定向到文件中永久保存。
进阶:同时执行命令+保存命令列表
如果你不仅要生成命令文件,还想直接执行这些命令,可以去掉--dry-run,同时用tee命令实现“一边执行一边存命令”:
seq 0 100 | parallel "mycommand --fixed arg 5 --variable_arg {}" 2>&1 | tee all_commands.txt
⚠️ 注意:如果mycommand本身有输出内容,tee会把命令的运行输出也写到文件里。如果只想保存命令本身,还是用第一种带--dry-run的方法更准确。
额外优化:控制并行进程数
要是担心同时跑100个进程占满系统资源,可以用-j参数限制并行数量,比如最多同时跑5个进程:
seq 0 100 | parallel -j 5 "mycommand --fixed arg 5 --variable_arg {}"
如果只是生成命令文件,加-j参数不影响结果,因为--dry-run本来就不会实际执行进程。
内容的提问来源于stack exchange,提问作者greenberet123




