7

Rubyスクリプトで「コマンドが見つかりません」エラーをキャプチャする方法はありますか?たとえば、次のようになります。

output = `foo`

fooインストールされていない状況をトラップするにはどうすればよいですか?例外になる可能性があると思ってrescueいましたが、1.8.7では機能しないようです。私が望むことを行うサブプロセスを呼び出す別の方法はありますか?それとも別のアプローチがありますか?

アップデート

申し訳ありませんが、隠された要件について言及するのを忘れました。インタプリタがコマンドラインをユーザーにリークしないことを望んでいます(機密データが含まれている可能性があります)。したがって、例外キャッチ方法が推奨されます。初めてこれを省略してしまったことを再度お詫びします。

4

1 に答える 1

14

リターンコードを使用してください!

irb(main):001:0> `date`
=> "Mo 24. Jan 16:07:15 CET 2011\n"
irb(main):002:0> $?
=> #<Process::Status: pid=11556,exited(0)>
irb(main):003:0> $?.to_i
=> 0
irb(main):004:0> `foo`
(irb):4: command not found: foo
=> ""
irb(main):005:0> $?.to_i
=> 32512

http://corelib.rubyonrails.org/classes/Process/Status.html

STDERRをSTDOUTにリダイレクトすると、出力が肥大化するのではなく、戻り値として出力されます。

irb(main):010:0> `foo 2>&1`
=> "sh: foo: not found\n"
irb(main):011:0> $?.to_i
=> 32512
于 2011-01-24T15:08:00.740 に答える