我有一个接受参数的脚本,我希望它能够作为 linux 服务运行。 有一个从/etc/ini.t/deploy 到实际脚本的符号链接(symbolic link)。
如果我跑
/etc/init.d/deploy --machine NAME --message "Hello World"
一切正常,脚本接收到 4 个参数:
'--machine',
'NAME',
'--message',
'Hello World'
另一方面,如果我运行它
/sbin/service deploy --machine NAME --message "Hello World"
然后脚本接收5个参数:
'--machine',
'NAME',
'--message',
'Hello',
'World'
同样的情况在 Perl 和 Python 中都会发生,所以据我所知,它是在空间分割后传递参数的“服务”。我该怎么做才能使这项工作与直接调用时使用“服务”的方式相同?
最佳答案
这就是传递参数的问题。显然,在您的上下文中,有些东西不是逐字传递的,而是通过解释传递的,可以这么说。
您可以使用两次引用您的东西的解决方法:
/sbin/service deploy --machine NAME --message '"Hello World"'
在许多情况下,这可以解决问题。
更通用的方法是使用现代 bash
的 printf "%q"
:
/sbin/service deploy --machine NAME --message "$(printf "%q" "Hello World")"
这会生成给定字符串的引用版本。
关于python - 将带空格的参数传递给 linux 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808317/