GNU/Linux >> Znalost Linux >  >> Linux

Proč se bash nezastaví při chybě pro selhání v sekvenci zkratovaných příkazů?

Logika je taková, že používáte && již je kontrola chyb. Stejným způsobem bash neošetřuje selhání v rámci if stav, který stojí za to přerušit, dokonce i s set -e .

Když zabalíte příkazy do závorek, ve skutečnosti je spouštíte v podslupce, takže samotný skript vidí pouze návrat této podskořápky, tj.:neví, že && je vůbec zapojen, takže se přeruší, jak očekáváte.


Citujte referenční příručku:

Shell se neukončí, pokud je příkaz, který selže, součástí seznamu příkazů bezprostředně po chvíli nebo dokud klíčové slovo, součást testu v příkazu if, součást jakéhokoli příkazu provedeného v &&nebo || seznam kromě příkazu následujícího za koncovým &&nebo ||, jakéhokoli příkazu v kanálu kromě posledního, nebo pokud je návratový stav příkazu invertován pomocí !


Linux
  1. Proč substituce procesu Bash nefunguje s některými příkazy?

  2. Proč překladový soubor Bash neobsahuje všechny chybové texty?

  3. Proč „ukončit &“ nefunguje?

  1. Chyba Linuxu:bash:rsync:příkaz nenalezen

  2. Proč nefunguje find -exec mv {} ./target/ +?

  3. Bash ignoruje chybu pro konkrétní příkaz

  1. Příkaz yum-config-manager nenalezen [Opravit]

  2. Bash:Proč se nadřazený skript neukončí na SIGINT, když podřízený skript zachytí SIGINT?

  3. Proč se tento příkaz ldapadd ukončí s chybou Neplatná syntaxe?