2013-04-03 12 views
5

Jak mogę sprawdzić wartość zwracaną (true/false) komendy bash w instrukcji if w Ruby. Chcę, aby coś takiego zadziałało,sprawdzanie komendy bash w instrukcji if w Ruby

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

Narzeka z następującym błędem oznaczającym, że zawsze zwróci true.

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

Jaka jest prawidłowa składnia?

UPDATE:

/usr/bin/fs wscell 

szuka afs zainstalowany i uruchomiony stanie. Będzie rzucać ciąg tak,

This workstation belongs to cell <afs_server_name> 

Jeśli afs nie jest uruchomiony, wyjścia polecenia ze statusem 1

+2

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

+0

Czy chcesz sprawdzić, czy ma zwracaną wartość "0 versus -1", czy też wyprowadza tekst "true" z polecenia? – rogerdpack

+0

@NeilSlater, Twoje podwójne znaki akcentu nie działają. Twoja edycja działa. – iamauser

Odpowiedz

6

Chcesz odwrócone, pojedyncze apostrofy zamiast cudzysłowia. Aby sprawdzić wyjście programu:

Gdzie COŚ jest wypełnione tym, czego szukasz.

+0

To jest poprawna składnia, ale zauważ, że to tylko przetestuje wyjście polecenia. Myślę, że musi sprawdzić stan wyjścia polecenia, więcej szczegółów w mojej odpowiedzi. – gonz

+0

@gonz: Dobra uwaga. Niezależnie od tego, co OP chciał przetestować, było to zbyt uproszczone, ponieważ nie wiedziałem, co to było. – Chuck

+0

@gonz: Czy ta składnia nie sprawdza już statusu wyjścia? Czy będzie to prawda, nawet jeśli polecenie się nie powiedzie? – iamauser

4

Należy prawdopodobnie użyciu system() lub backticks i następnie sprawdzić stan wyjścia polecenia ($ ?. exitstatus):

Herezje dobra quicktip przeczytać: 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

Czy masz bardziej szczegółową składnię do pracy? Przejmę akceptację, jeśli ją dostarczysz. Wygląda na to, że muszę dbać o status wyjścia. – iamauser

+0

Oczywiście, proszę. – gonz

+0

Będą one wyrażały dokładnie to samo, ale twój sposób nie jest uznawany za idiomatyczny kod ruby, jest zbędny od! = To operator boolowski, że zwróci true lub false :) – gonz