2013-04-03 12 views
5

Rubyのif文でbashコマンドの戻り値(true/false)をチェックする方法を教えてください。私はこのようなものが動作するようにしたい、Rubyのif文でbashコマンドを確認する

if ("/usr/bin/fs wscell > /dev/null 2>&1") 
       has_afs = "true" 
     else 
       has_afs = "false" 
     end 

それは、次のエラーの意味では、それは常にtrueを返します。

(irb):5: warning: string literal in condition 

正しい構文は何ですか。

UPDATE:

/usr/bin/fs wscell 

afsインストールされ、実行条件を探します。 afsあなたはバッククォートではなく、二重引用符をしたいステータス1

+2

'if(\'/usr/bin/fs wscell>/dev/null 2>&\ ')'? –

+0

戻り値が "0対-1"かどうか、またはコマンドからテキスト "true"が出力されているかどうかを確認しますか? – rogerdpack

+0

@ NeeSlater、二重アクセント記号が機能しません。あなたの編集は機能します。 – iamauser

答えて

6

と、コマンドは終了を実行していない場合には、

This workstation belongs to cell <afs_server_name> 

を、このような文字列をスローします。プログラムの出力を確認するには:

has_afs = `/usr/bin/fs wscell > /dev/null 2>&1` == SOMETHING ? 'true' : 'false' 

あなたが探しているもので何かが記入されています。

+0

これは正しい構文ですが、これはコマンドの出力をテストすることに注意してください。私は彼がコマンドの終了ステータスを確認する必要があると思う、私の答えの詳細。 – gonz

+0

@gonz:良い点。 OPが何をテストしたかったかに関わらず、私はそれが何であるか分からなかったので単純すぎた。 – Chuck

+0

@gonz:この構文で終了ステータスが既にチェックされていませんか?それで、コマンドが失敗したとしてもそれは本当ですか? – iamauser

4

あなたはおそらく(システムを使用する必要があります)、またはバッククォートと、コマンドの終了ステータス($?。終了ステータス)を確認

相続人は良いquicktipが読み:http://rubyquicktips.com/post/5862861056/execute-shell-commands)を

UPDATE:

system("/usr/bin/fs wscell > /dev/null 2>&1") # Returns false if command failed 
has_afs = $?.exitstatus != 1 # Check if afs is running 
+0

より具体的な構文を使用していますか?あなたがそれを提供するなら、私は受け入れを切り替えます。私は出口の状態を気にする必要があるようです。 – iamauser

+0

確かに、そこに行きます。 – gonz

+0

これはまったく同じことを表現しますが、慣用的なルビコードとはみなされません。それは冗長ですから!=真偽を返す論理演算子です:) – gonz

関連する問題