web-dev-qa-db-fra.com

Comment les parenthèses sont-elles interprétées sur la ligne de commande?

En lisant comment configurer grub, je suis tombé sur un article affirmant que je devais utiliser l'une des deux syntaxes suivantes,

echo \(hd0,0\) >> /boot/grub/grub.conf

ou

echo '(hd0,0)' >> /boot/grub/grub.conf

car, sur la ligne de commande, les parenthèses sont interprétées d'une manière spéciale. Quelle est la particularité des parenthèses? Comment sont-ils interprétés?

47
Steve Brown

Les parenthèses indiquent un sous-shell dans bash. Pour citer le man bash page:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the Shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

où un list est juste une séquence normale de commandes.

Ceci est en fait assez portable et n'est pas spécifique à seulement bash. Spécification du langage de commande du shell POSIX a la description suivante pour le (compound-list) syntaxe:

Exécuter liste-composée dans un environnement de sous-shell; voir Environnement d'exécution Shell . Les affectations de variables et les commandes intégrées qui affectent l'environnement ne doivent pas rester en vigueur une fois la liste terminée.

48
jw013

Une liste de commandes intégrée entre parenthèses s'exécute en tant que sous-shell.

Les variables dans un sous-shell ne sont pas visibles en dehors du bloc de code dans le sous-shell. Ils ne sont pas accessibles au processus parent, au shell qui a lancé le sous-shell. Ce sont en effet des variables locales.

Voir Linuxtopia - Chapitre 20. Sous-coquilles

12
mark