带引号参数的包装脚本

时间:2012-02-01 20:10:13

标签: wrapper sh shell

我有一些python脚本,由于各种原因,我有围绕它们的shell脚本包装:

#!/bin/sh
source env.sh
python $0.py $@

除非需要引用参数,否则这样可以正常工作。当然,在这种情况下,包装器会使用引号,并将未引用的版本提供给python脚本。所以,我的第一个问题是“我怎么能不去吃引号?”

但是,即使我反向删除引号,它也不起作用。我打印出我要打电话的整个命令:

 source env.sh 
 echo "python $0.py $@"
 python $0.py $@

如果我用foo \“a b c”调用它,它会输出      python foo.py“a b c” 但是,当foo.py被调用时,它仍然是GETS foo.py a b c

如果我只是复制并粘贴输出,并运行它,它运行正常。

有人能告诉我为什么实际执行会从脚本失败,但在命令行上成功吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你需要引用实际使用$@参数,即

 source env.sh 
 echo "python $0.py $@"
 python $0.py "$@"

我希望这会有所帮助。