2016-04-26 5 views
1
#!/bin/bash 
# exitlab 
# 
# example of exit status 
# check for non-existent file 
# exit status will be 2 
# create file and check it 
# exit status will be 0 
# 
ls xyzzy.345 > /dev/null 2>&1 
status='echo $?' 
echo "status is $status" 

# create the file and check again 
# status will not be 0 
touch xyzzy.345 

ls xyzzy.345 > /dev/null 2>&1 
status='echo $?' 
echo "status is $status" 

#remove the file 
rm xyzzy.345 

edx.org hat ein Lab und das ist das Skript. Wenn ich es laufen, ist die Ausgabe wie folgt:Bash Exit Code Status Skript Fehler

status is echo $? 
status is echo $? 

ich glaube, das ausgegeben werden soll, entweder 0 oder 2 Ich habe versucht Klammern wie status='(echo $?) setzen, aber das führt zu status is echo $?. Dann habe ich versucht, Klammern außerhalb der einfachen Anführungszeichen status=('echo $?') zu setzen, aber dies gab mir die gleiche Ausgabe status is echo $?.

Irgendwelche Ideen?

+0

Ich würde verwenden 'echo "Status" $' oder 'stt = $ ?; echo "status is" $ stt' –

Antwort

-1

Sie müssen hier doppelte Anführungszeichen verwenden, damit die Variablensubstitution stattfindet. Ändern

status='echo $?' 

zu

status="echo $?" 

Sie könnten diese Anleitung hilfreich für: Bash Guide for Beginners

+0

Vielen Dank. Das erzeugte den korrekten Ausgang 'Status ist Echo 2' und ' Status ist Echo 0'. Bitte beantworte meine Frage, damit ich dir Punkte geben kann. – Debug255

+0

Ich vermute, dass Sie interessiert sind, wie Zitate funktionieren, und nicht in Backticks. Ich habe meine Antwort aktualisiert. Einfache Anführungszeichen schützen das $, während doppelte Anführungszeichen die Ersetzung ermöglichen. HTH – Dinesh

1

Sie suchen Kommandosubstitution (status=$(echo $?)), obwohl es nicht notwendig ist. Sie können den Wert von $? direkt an status zuweisen:

status=$? 
+0

Danke. Dies ist das Skript, das der Kurs auf edx.org zur Verfügung stellt. Dein Ratschlag macht Sinn für Skripte, für die ich diese verwenden muss. – Debug255