GNU/Linux >> Linux Esercitazione >  >> Linux

Qualsiasi modo per uscire dallo script bash, ma non uscire dal terminale

Sì; puoi usare return invece di exit . Il suo scopo principale è tornare da una funzione di shell, ma se la usi all'interno di un source -d script, ritorna da quello script.

Come §4.1 "Bourne Shell Builtins" del Manuale di riferimento di Bash dice:

     return [n]

Fa terminare una funzione di shell con il valore restituito n .Se n non viene fornito, il valore restituito è lo stato di uscita dell'ultimo comando eseguito nella funzione. Questo può essere utilizzato anche per terminare l'esecuzione di uno script in esecuzione con il . (o source ) incorporato, restituendo n o lo stato di uscita dell'ultimo comando eseguito all'interno dello script come stato di uscita dello script.Qualsiasi comando associato al RETURN trap viene eseguito prima che l'esecuzione riprenda dopo la funzione o lo script. Lo stato restituito è diverso da zero se return è usato al di fuori di una funzione e non durante l'esecuzione di uno script da parte di . o source .


Invece di eseguire lo script usando . run2.sh , puoi eseguirlo utilizzando sh run2.sh o bash run2.sh

Verrà avviata una nuova sub-shell, per eseguire lo script poi, verrà chiusa alla fine dello script lasciando aperta l'altra shell.


Il "problema" in realtà è che stai procurando e non eseguendo lo script. Quando crei un file, il suo contenuto verrà eseguito nella shell corrente, invece di generare una subshell. Quindi tutto, inclusa l'uscita, influenzerà la shell corrente.

Invece di usare exit , ti consigliamo di utilizzare return .


Puoi aggiungere un comando di uscita aggiuntivo dopo l'istruzione/comando return in modo che funzioni per entrambi, eseguendo lo script dalla riga di comando e recuperando dal terminale.

Esempio di codice di uscita nello script:

   if [ $# -lt 2 ]; then
     echo "Needs at least two arguments"
     return 1 2>/dev/null
     exit 1
   fi

La riga con exit il comando non verrà chiamato quando si genera lo script dopo il return comando.

Quando esegui lo script, return comando dà un errore. Quindi, eliminiamo il messaggio di errore inoltrandolo a /dev/null .


Linux
  1. La differenza tra gli operatori Bash [[ Vs [ Vs ( Vs ((?

  2. Il modo migliore per rilevare (da uno script) se il software è installato?

  3. Uno script può essere eseguibile ma non leggibile?

  4. Bash Echo La riga di comando eseguita sulla riga di comando stessa (non in uno script)?

  5. Il modo "corretto" per verificare se un servizio è in esecuzione in uno script?

Perché il documento Parent Shell Here non funziona per il sottocomando in Dash ma Bash funziona?

Ottieni tutti i file tranne i file nell'array - Bash?

Bash + Come uscire dallo script secondario e dallo script principale in entrambi i casi?

Bash:perché lo script genitore non termina su SIGINT quando lo script figlio intercetta SIGINT?

Genera errore in uno script Bash

Controlla se uno qualsiasi dei parametri di uno script bash corrisponde a una stringa