【发布时间】:2018-07-23 06:36:51
【问题描述】:
我有一个带有两个参数的 bash 脚本。在该脚本中,我需要使用 heredoc 调用 ssh 并调用需要两个参数的方法。例如:
ssh -o "IdentitiesOnly=yes" -t -i $key -l user localhost << 'ENDSSH'
/my_python_app.py -u -t tar -p $1 -f $2
ENDSSH
key 由我的脚本设置,我知道那部分很好。
但是,my_python_app 打印出 args 并且没有显示 -p 和 -f 的任何参数
我会这样称呼我的脚本
my_script /tmp filename
我在我的 python 应用程序中使用 argparse,但我也打印出 sys.argv 它给了我:
['my_python_app.py', '-u', '-t', 'tar', '-p', '-f']
请注意,没有接收到 -p 和 -f 的值。 (-u 是一个标志,并且设置正确)。
如何将 $1 和 $2 作为 -p 和 -f 值传递给 my_python_app?
【问题讨论】:
-
一般来说,你应该总是引用扩展。
"$key","$1","$2"。没有引号,您无法保证在执行命令时它们将被拆分成多少个单独的 argv 元素。即使您认为所有内容都将始终解析为一个单词,从而改进您的错误消息&c。当遇到意外情况时(得到-p无法获得''的参数比得到-p得到参数-f和-f没有被解析为一个单独的论点)。