2013-04-03 10 views
5

Wie kann ich den Rückgabewert (true/false) des Bash-Befehls in einer if-Anweisung in Ruby überprüfen? Ich möchte, dass so etwas funktioniert,Überprüfung eines Bash-Befehls in einer if-Anweisung in Ruby

Es beschwert sich mit der folgenden Fehlerbedeutung, es wird immer wahr zurückgegeben.

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

Wie lautet die korrekte Syntax?

UPDATE:

/usr/bin/fs wscell 

sucht afs installiert und ausgeführt Zustand. Es wird eine Zeichenfolge wie diese werfen,

This workstation belongs to cell <afs_server_name> 

Wenn afs nicht ausgeführt wird, der Befehl beendet mit Status 1

+2

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

+0

Möchten Sie sehen, ob es einen Rückgabewert von "0 im Vergleich zu -1" hat oder ob es den Text "true" vom Befehl ausgibt? – rogerdpack

+0

@NeilSlater, Ihre doppelten Akzentzeichen funktionieren nicht. Ihre Bearbeitung funktioniert. – iamauser

Antwort

6

Sie wollen Backticks anstelle von doppelten Anführungszeichen. So überprüfen Sie die Ausgabe eines Programms:

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

Hier ist SOMETHING mit dem, was Sie suchen, gefüllt.

+0

Das ist die korrekte Syntax, aber beachten Sie, dass dies nur die Ausgabe des Befehls testen würde. Ich denke, er muss den Exit-Status des Befehls überprüfen, mehr Details in meiner Antwort. – gonz

+0

@gonz: Guter Punkt. Ungeachtet dessen, was das OP testen wollte, wurde dies vereinfacht, nur weil ich nicht wusste, was es war. – Chuck

+0

@gonz: Prüft diese Syntax den Exit-Status nicht schon? Also, wird es auch dann wahr sein, wenn der Befehl fehlschlägt? – iamauser

4

Sie sollten wahrscheinlich verwenden system() oder Backticks und dann den Exit-Status des Befehls überprüfen ($ ?. exitstatus):

Heres eine gute Quicktip zu lesen: 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

Haben Sie eine spezifischere Syntax, mit der Sie arbeiten können? Ich wechsle meine Annahme, wenn Sie eine zur Verfügung stellen. Es scheint, dass ich mich um den Exit-Status kümmern muss. – iamauser

+0

Sicher, los gehts. – gonz

+0

Es wird genau das gleiche Ding ausdrücken, aber Ihre Art, es wird nicht als idiomatischer Ruby-Code betrachtet, es ist redundant seit! = Es ist ein boolescher Operator, der wahr oder falsch zurückgibt :) – gonz

Verwandte Themen