如何在exec命令中向Bash传递参数?脚本参数报错解决
问题解决方法
你的问题出在两个核心点:
- 单引号包裹的Python代码段里,Bash不会解析
$1、$2变量,Python实际收到的是原字符串$1和$2,直接当成变量名自然会触发语法错误。 - 原脚本里的
exec语句多了个多余的闭合括号,本身就不符合Python语法规范。
基础修复版本
直接修改脚本,用双引号包裹Python代码(让Bash能正常展开变量),同时修正语法错误:
#!/bin/bash ./buind/env/hue shell -i python -c "exec(open('my.py').read, {'pars': ['$1', '$2']})"
兼容特殊参数的稳妥版本
如果你的参数包含空格、引号这类特殊字符,上面的写法可能出问题,可以先把参数转义成合法的Python字符串:
#!/bin/bash # 转义参数为Python可识别的安全格式 par1=$(printf "%q" "$1") par2=$(printf "%q" "$2") ./buind/env/hue shell -i python -c "exec(open('my.py').read, {'pars': [$par1, $par2]})"
这样运行./my.sh "mypar1" "mypar2"时,Bash会先把$1、$2替换成实际参数,再传递给Python执行,就不会再报语法错误了。
内容的提问来源于stack exchange,提问作者CompEng
相关产品推荐
相关产品推荐

