GNU/Linux >> Znalost Linux >  >> Linux

Má Running „exec Echo Some; Echo Test“ V Bash Nikdy netisknout „nějaký test“?

Spuštění exec echo "some "; echo "test" v bash nikdy netisknout „nějaký test“?

Chtěl bych požádat o potvrzení této otázky, protože píšu malý skript Shell a chtěl bych, aby po exec nic nepokračovalo byl zavolán příkaz.

Myslím, že po konzultaci bych se podle mého názoru nemusel obávat:

  • man 3 exec
  • man 1p exec

Skripty shellu, když jsou spuštěny shellem, vytvoří

  1. shell spustí program exec , který
  2. používá exec*** rodinná systémová volání, která nahrazují shell/bash to, co provádělo skript, tímto bráněním další akce shellu (který byl „nahrazen“)

Jak bylo uvedeno výše, hlavním cílem této otázky je získat potvrzení pro mou úvahu, jak zabránit tomu, aby se cokoli ve skriptu objevilo po exec (např. echo test ) bude proveden.

Ocenil bych obecnou odpověď (POSIX), pokud je to možné, ale jen v případě zvláštností mě nejvíce zajímají GNU/Linux a GNU/Bash

Přijatá odpověď:

exec vždy dokončí skript if provede příkaz a provede jej úspěšně (nesouvisí s ukončovacím kódem příkazu, ale s jeho spuštěním).

exec lze spustit bez příkazu velmi užitečným způsobem:Trvalé přesměrování deskriptorů souborů:

exec 3>/path/to/file

Pokud příkaz nelze spustit, závisí chování shellu na konfiguraci. bash ve výchozím nastavení se ukončí.

Nejlepší může být pro vás použít funkci:

safe_exec () {
    cmd="$1"
    if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
        exit 1
    else
        exec "[email protected]"
    fi
}

safe_exec echo "some "; echo "test"

Linux
  1. How To Echo A Bang!?

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

  3. Jak vidět, že se přesný příkazový řádek spouští uvnitř některé instance Bash?

  1. Chtěl bych uložit všechny argumenty příkazového řádku do skriptu Bash do jedné proměnné

  2. Existuje v bash způsob, jak echo/tisknout poslední stdout? Existuje proměnná, ke které je přiřazena stdout?

  3. Bash/sh příkaz „jestli je to jinak“.

  1. Zabránění souběžnému spuštění bash skriptu

  2. Co dělá 'bash -c'?

  3. Jaké je použití $# v Bash