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

それが引数を渡す問題です。明らかに、あなたの文脈では何かが逐語的に渡されるのではなく、いわば解釈的に渡されます。

自分のものを2回引用する回避策を使用できます。

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

多くの場合、これで問題は解決します。

より一般的なアプローチはprintf "%q"、modernbashの を使用することです。

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

これにより、指定された文字列の引用バージョンが生成されます。

于 2013-11-06T09:38:52.700 に答える