2010-04-16 3 views

Répondre

6

état de sortie est normalement utilisé implicitement comme ceci:

if IsThereAnyApplesLeft;then 
    echo "Apples left" 
fi 
+0

+1 Sauf si vous avez réellement besoin du code de sortie réel; mais je ne veux généralement pas qu'en dehors de c – guns

+0

Ne pas oublier les conditions de court-circuit: IsThereAnyApplesLeft && echo "Apples Left" – pra

3

Essayez:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$? 

Et oui, vous avez à utiliser $? il n'y a pas moyen de l'éviter.

+0

+1 Clever! Et, en supposant qu'il n'y ait pas de sortie sur stdout (ou stderr), la redirection peut être omise. –

-1

Qu'est-ce qui n'est pas gracieux à propos de $??

Selon the Advanced Bash Scripting Guide, il n'y a pas d'autre moyen d'obtenir le code de sortie en dehors de $? - bien, ils ne listent pas d'autre moyen de l'obtenir en plus de $?. S'il y avait un autre moyen, il aurait certainement été listé dans la section Code de sortie dans le lien ci-dessus.

+0

C'est seulement si vous voulez conserver le statut de sortie. Si vous n'utilisez le statut qu'une seule fois, vous pouvez l'utiliser directement dans le test 'if IsThereAnyApplesLeft; puis écho "oui"; d'autre écho "non"; – mpez0

0

Les deux morceaux de code ne sont pas directement comparables. Votre exemple bash crée un sous-processus pour exécuter un exécutable appelé "IsThereAnyApplesLeft", en attendant que ce sous-processus se termine et stocke le code de sortie du sous-processus dans la variable $? afin que vous puissiez l'examiner et agir en conséquence.

C'est en fait une interaction assez complexe et faire la même chose en C nécessiterait une quantité considérable de code. Vous auriez à fork() un sous-processus, avoir le parent wait4pid() sur le pid de l'enfant, tout en même temps dans l'enfant appelant execl() sur le fichier "IsThereAnyApplesLeft" pour le faire fonctionner. L'un des avantages de l'utilisation d'un langage de script shell est qu'il vous cache ce genre de choses. Par comparaison, votre extrait de code C appelle simplement une fonction C et stocke le résultat dans une variable locale. Cela ressemblerait à ceci dans bash:

IsThereAnyApplesLeft() 
{ 
     echo 498 
} 

applesLeft=`IsThereAnyApplesLeft` 
echo "there are $applesLeft apples left." 
Questions connexes