如何使用xargs多次执行命令?解决Heroku命令参数报错问题
问题分析与解决
错误原因
你用**单引号包裹{}**的写法存在问题:shell的单引号会完全屏蔽变量替换与特殊字符解析,xargs的占位符{}被单引号包裹后,不会被替换成实际的查询值,而是作为字面量{}传递给命令。最终实际执行的命令是:
heroku local:run python put_in_db.py --query='{}' ffb557
put_in_db.py会把ffb557当成未定义的额外参数,因此抛出unrecognized arguments错误。
正确写法
单条测试命令
去掉单引号,或改用双引号包裹占位符(推荐显式指定-I {}避免参数拆分问题):
# 写法1:去掉单引号 echo 'ffb557' | xargs heroku local:run python put_in_db.py --query={} # 写法2:显式指定占位符+双引号(更安全,适合含特殊字符的查询) echo 'ffb557' | xargs -I {} heroku local:run python put_in_db.py --query="{}"
批量执行查询列表
针对["ffb557", "ttr887"]批量执行,有两种简单方案:
- 用xargs+printf批量传递:
printf "%s\n" ffb557 ttr887 | xargs -I {} heroku local:run python put_in_db.py --query="{}"
- 用shell循环(更直观,易调试):
for query in ffb557 ttr887; do heroku local:run python put_in_db.py --query="$query" done
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

