我编写了一个shell函数,旨在兼容zsh和bash:
py () { python -c 'print($1)'; }
但是当我使用py hello
时,我从Python解释器中得到一个错误:
➜ ~ py hello
File "<string>", line 1
print($1)
^
SyntaxError: invalid syntax
我做错了什么? 谢谢!
答案 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 -rf
或curl | sh
来拉下rootkit会发生什么。