3

我有一个脚本,它接受我希望能够作为 linux 服务运行的参数。从 /etc/ini.t/deploy 到实际脚本有一个符号链接。

如果我跑

/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 中也会发生同样的情况,所以据我所知,在空间分割后传递参数的是“服务”。我该怎么做才能使“服务”以与直接调用时相同的方式工作?

4

1 回答 1

2

这就是传递参数的问题。显然,某些东西不是在您的上下文中逐字传递,而是通过解释,可以这么说。

您可以使用两次引用您的东西的解决方法:

/sbin/service deploy  --machine NAME --message '"Hello World"'

在许多情况下,这可以解决问题。

更通用的方法是使用printf "%q"现代bashs 的 :

/sbin/service deploy  --machine NAME --message "$(printf "%q" "Hello World")"

这会生成给定字符串的引用版本。

于 2013-11-06T09:38:52.700 回答