it-swarm-eu.dev

Jak jsou interpretovány závorky na příkazovém řádku?

Když jsem četl, jak nastavit grub, narazil jsem na článek, který tvrdil, že potřebuji použít jednu z následujících dvou syntaxí,

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

nebo

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

protože na příkazovém řádku jsou závorky interpretovány zvláštním způsobem. Co je na závorkách zvláštní? Jak se interpretují?

47
Steve Brown

Závorky označují subshell v bash. Citovat man bash stránka:

(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.

kde list je jen normální sekvence příkazů.

To je vlastně docela přenosné a ne specifické pouze pro bash. POSIX Shell Command Language spec má následující popis pro (compound-list) syntaxe:

Spustit složený seznam v prostředí subshell; viz Shell Execution Environment . Proměnná přiřazení a vestavěné příkazy, které mají vliv na životní prostředí, nezůstanou v platnosti po dokončení seznamu.

48
jw013

Seznam příkazů vložený mezi závorky běží jako podshell.

Proměnné v subshell nejsou viditelné mimo blok kódu v subshell. Nejsou přístupné nadřazenému procesu, do Shell, který spustil podshell. Ve skutečnosti jsou to lokální proměnné.

Viz Linuxtopia - Kapitola 20. Subshells

12
mark