2 votes

L'état de sortie est 0, alors que l'état attendu est 255.

J'ai un code que j'ai utilisé pour les tests

hola="cd /var && ssh localhost.error" $hola echo $?

Exécuter juste

cd /var && ssh localhost.error

renvoie le code 255.

Mais l'exécution

hola="cd /var && ssh localhost.error" $hola

renvoie 0, alors que l'on s'attendait à 255.

hola="ssh localhost.error" $hola

renvoie à 255.

¿Por qué?

1voto

Budda Points 123
hola="cd /var && ssh localhost.error"
$hola

Lorsque vous faites cela, la deuxième ligne vous amène à invoquer la fonction cd avec les arguments /var , && , ssh und localhost.error . Cd ignore tout sauf le premier argument, et il change avec succès vers /var, donc il n'affiche pas d'erreur.

Cela est dû à l'ordre dans lequel bash traite les lignes de commande. Lorsque vous tapez cd /var && ssh localhost.error En termes de bash, il s'agit d'un liste de deux commande s. Bash analyse les listes en commandes distinctes, puis analyse chaque commande. L'expansion des variables a lieu lors de l'analyse des commandes, et non des listes.

Lorsque vous exécutez $hola L'analyseur de commandes s'exécute, développe la variable et voit le &&, mais ce n'est pas spécial pour l'analyseur de commandes.

Vous pouvez essayer d'utiliser une fonction Shell à la place :

function hola { cd /var && ssh localhost.error; }

0voto

kel Points 101

Cela peut être lié au fait que vous n'exécutez pas la commande sur la même ligne, mais que vous enregistrez la chaîne avec la commande et que vous appelez ensuite la variable contenant cette chaîne.

Essayez plutôt ceci :

hola=$(cd /var && ssh localhost.error)
echo $hola

Cela devrait permettre d'obtenir 255 ou tout autre code d'erreur attendu.

Prenons l'exemple suivant :

> hola="echo hi"
> $hola
hi
>echo $?
0

> hola="hi"
> $hola
ksh: hi:  not found
> echo $?
127

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X