Ho uno script Bash che è stato originato. Quando questo script è originario, esegue una funzione nello script Bash. Questa funzione dovrebbe terminare lo script se una determinata condizione è abbinata. Come si può fare senza terminare la shell in cui viene eseguito lo script?Come uscire da una funzione di script Bash originario
Per essere chiari: voglio che l'azione di terminazione sia completata dalla funzione nello script di shell di origine, non nel corpo principale dello script di shell di origine. I problemi che riesco a vedere sono che return
restituisce semplicemente dalla funzione al principale dello script mentre exit 1
termina la shell chiamante.
L'esempio seguente illustra il problema minimo:
main(){
echo "starting test of environment..."
ensure_environment
echo "environment safe -- starting other procedures..."
}
ensure_environment(){
if [ 1 == 1 ]; then
echo "environment problemm -- terminating..."
# exit 1 # <-- terminates calling shell
return # <-- returns only from function, not from sourced script
fi
}
main
Eseguire invece lo script. In questo modo, 'exit' uscirà dalla subshell in cui è in esecuzione. – fedorqui
Interessante. Potresti dare un piccolo esempio per iniziare, che potrebbe essere migliorato. Per esempio. uno che termina la shell. –
Chiedete qualcosa che sia impossibile. Devi ristrutturare il tuo codice. –