2016-04-26 3 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 a un laboratoire et c'est le script. Quand je le lance, la sortie est la suivante:Erreur de script Bash Exit Code Statut

status is echo $? 
status is echo $? 

Je pense que la sortie est censé être 0 ou 2. J'essayé de mettre entre parenthèses comme status='(echo $?) mais qui se traduit par status is echo $?. Puis, j'ai essayé de mettre entre parenthèses en dehors des guillemets simples status=('echo $?') mais cela m'a donné la même sortie status is echo $?.

Des idées?

+0

Je voudrais utiliser 'echo "état est" $' 'ou stt = $ ?; echo "status est" $ stt' –

Répondre

-1

Vous devez utiliser des guillemets doubles ici pour la substitution variable lieu. Changer

status='echo $?' 

à

status="echo $?" 

Vous trouverez peut-être ce guide utile: Bash Guide for Beginners

+0

Merci. Cela a produit la sortie correcte 'status is echo 2' et ' status est echo 0'. Veuillez répondre à ma question pour que je puisse vous donner des points. – Debug255

+0

Je devine que vous êtes intéressé par la façon dont les guillemets fonctionnent, et pas en backticks. J'ai mis à jour ma réponse. Les guillemets simples protègent le $ tandis que les guillemets doubles permettent la substitution. HTH – Dinesh

1

Vous êtes à la recherche de substitution de commande (status=$(echo $?)), bien qu'il ne soit pas nécessaire. Vous pouvez affecter la valeur de $? directement à status:

status=$? 
+0

Merci. C'est le script du cours sur edx.org fourni. Votre conseil est logique pour les scripts dont je pourrais avoir besoin pour cela. – Debug255