将参数从shell传递给嵌入式Python脚本

时间:2015-01-11 16:11:21

标签: python bash shell zsh

我编写了一个shell函数,旨在兼容zsh和bash:

py () { python -c 'print($1)'; }

但是当我使用py hello时,我从Python解释器中得到一个错误:

➜  ~  py hello
  File "<string>", line 1
    print($1)
          ^
SyntaxError: invalid syntax

我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

根本不使用字符串替换 - 这种方式就是{表达式} Bobby Tables。相反,在带外传递参数:

py() { python -c 'import sys; print sys.argv[1]' "$@"; }
py hello

说明为什么其他方法很危险:

py() { python -c "print('${1}')"; }
py "hello' + str(__import__('os').system('touch /tmp/broke-your-security')) + '"

运行时,此代码会创建一个文件/tmp/broke-your-security。考虑如果该命令涉及rm -rfcurl | sh来拉下rootkit会发生什么。