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; }