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ří
- shell spustí program
exec
, který - 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"