Bash中如何将列表文件逐行内容作为参数执行命令
实现方法
方案1:通用while循环(适配所有合法行内容,推荐)
该方案兼容带空格、特殊字符、末尾无换行的参数文件,是最稳妥的实现方式:
# 请将下方的「参数文件路径」替换为你实际的文件路径,将do替换为实际要执行的命令 while IFS= read -r line || [[ -n "${line}" ]]; do do "${line}" done < 参数文件路径
参数说明:
IFS=关闭行首尾空白字符自动裁剪,保留原始行内容-r关闭反斜杠转义逻辑,避免行内的反斜杠被自动处理|| [[ -n "${line}" ]]兼容文件最后一行没有换行符的场景,避免最后一行参数被漏处理- 用双引号包裹
${line}是为了避免行内容存在空格时,被拆分为多个参数传入命令
方案2:xargs快速实现(仅适用于参数不含特殊字符的简单场景)
如果你的参数都是纯文本、无空格和特殊转义字符,可以用更简洁的xargs实现:
# 请将下方的「参数文件路径」替换为你实际的文件路径,将do替换为实际要执行的命令 xargs -I {} do {} < 参数文件路径
前置校验建议
在执行实际操作前,你可以先将命令替换为echo打印预期执行内容,确认无误后再运行真实命令,避免误操作:
while IFS= read -r line || [[ -n "${line}" ]]; do echo "do ${line}" done < 参数文件路径
内容的提问来源于stack exchange,提问作者Kirna
相关产品推荐
相关产品推荐

