Ano; můžete použít return
místo exit
. Jeho hlavním účelem je vrátit se z funkce shellu, ale pokud ji použijete v source
-d skript, vrátí se z tohoto skriptu.
Jako § 4.1 „Bourne Shell Builtins“ Bash Reference Manual říká:
return [n]
Způsobí ukončení funkce shellu s návratovou hodnotou n .Pokud n není zadán, návratová hodnota je stav ukončení posledního příkazu provedeného ve funkci. Toto lze také použít k ukončení provádění skriptu, který se provádí pomocí
.
(nebosource
) vestavěný, vrací buď n nebo stav ukončení posledního příkazu provedeného ve skriptu jako stav ukončení skriptu. Jakýkoli příkaz spojený sRETURN
trap je spuštěn před obnovením provádění po funkci nebo skriptu. Návratový stav je nenulový, pokudreturn
se používá mimo funkci a ne během provádění skriptu pomocí.
nebosource
.
Místo spouštění skriptu pomocí . run2.sh
, můžete jej spustit pomocí sh run2.sh
nebo bash run2.sh
Spustí se nový sub-shell, pro spuštění skriptu se pak na konci skriptu zavře a druhý shell zůstane otevřený.
"Problém" je ve skutečnosti v tom, že skript získáváte a nespouštíte. Když vytvoříte zdrojový soubor, jeho obsah bude spuštěn v aktuálním shellu, místo toho, aby se vytvořil podshell. Takže vše, včetně ukončení, ovlivní aktuální shell.
Místo použití exit
, budete chtít použít return
.
Za příkaz/příkaz return můžete přidat další příkaz exit, aby fungoval jak pro spuštění skriptu z příkazové řádky, tak pro získávání zdrojů z terminálu.
Příklad výstupního kódu ve skriptu:
if [ $# -lt 2 ]; then
echo "Needs at least two arguments"
return 1 2>/dev/null
exit 1
fi
Řádek s exit
příkaz nebude volán, když zdroj skriptu zadáte za return
příkaz.
Když skript spustíte, return
příkaz hlásí chybu. Chybovou zprávu tedy potlačíme jejím přeposláním na /dev/null
.