0

Ruby 内からスクリプトを実行する方法を知っています。私は通常、バックティックを使用しますが、正常に動作します。最近、スクリプトにもう 1 つの引数を与えるようにというリクエストがありましたが、ここで問題が発生しました。

もともと、それは次のように見えます: 次のように定義されたグローバル変数:

SCRIPT = "/opt/customer/send_command.pl"

次に、呼び出します

status =`"#{SCRIPT}" -c "ctl.pl qstatus"`
queue = `"#{SCRIPT}" -c "ctl.pl queue"`

すべて順調。ここで、スクリプト send_command.pl に入力するパラメーターがもう 1 つあります。そこで、グローバル変数 SCRIPT を次のように変更しました。

SCRIPT = "/opt/customer/send_command.pl -p production"

そして、同じ方法でそのスクリプトを呼び出します。

status =`"#{SCRIPT}" -c "ctl.pl qstatus"`

しかし、エラーメッセージが表示されました:

sh: /opt/customer/send_command.pl -p production: not found

SCRIPT 変数を捨てる場合は、次のようにスクリプトを直接呼び出します。

status = `/opt/customer/send_command.pl -p production -c "ctl.pl qstatus"`

期待どおりに動作します。

私の質問は、なぜそれが起こるのか、それを修正する方法は? 手動で -p production をどこにでも置くことができると思いますが、理想的ではなく、エラーが発生しやすくなります。

4

2 に答える 2

6

余分な二重引用符があるため、機能しませんでした。修正するには、それらを削除します。

status =`#{SCRIPT} -c "ctl.pl qstatus"`
于 2013-10-30T15:57:25.293 に答える
1

二重引用符を削除します。

から:

status =`"#{SCRIPT}" -c "ctl.pl qstatus"`

status =`#{SCRIPT} -c "ctl.pl qstatus"`

次のようにエスケープしようとしない限り:

status ="#{SCRIPT} -c \"ctl.pl qstatus\""
于 2013-10-30T16:01:24.297 に答える