GNU/Linux >> Tutoriels Linux >  >> Linux

N'importe quel moyen de quitter le script bash, mais sans quitter le terminal

Oui; vous pouvez utiliser return au lieu de exit . Son objectif principal est de revenir d'une fonction shell, mais si vous l'utilisez dans un source -d script, il revient à partir de ce script.

Comme §4.1 "Bourne Shell Builtins" du Bash Reference Manual le met :

     return [n]

Provoque la sortie d'une fonction shell avec la valeur de retour n .Si n n'est pas fourni, la valeur de retour est l'état de sortie de la dernière commande exécutée dans la fonction. Cela peut également être utilisé pour terminer l'exécution d'un script en cours d'exécution avec le . (ou source ) intégré, renvoyant soit n oul'état de sortie de la dernière commande exécutée dans le script comme état de sortie du script.Toute commande associée au RETURN le trap est exécuté avant que l'exécution ne reprenne après la fonction ou le script. L'état de retour est différent de zéro si return est utilisé en dehors d'une fonction et non lors de l'exécution d'un script par . ou source .


Au lieu d'exécuter le script en utilisant . run2.sh , vous pouvez l'exécuter en utilisant sh run2.sh ou bash run2.sh

Un nouveau sous-shell sera démarré, pour exécuter le script ensuite, il sera fermé à la fin du script laissant l'autre shell ouvert.


Le "problème" est vraiment que vous recherchez et n'exécutez pas le script. Lorsque vous sourcez un fichier, son contenu sera exécuté dans le shell actuel, au lieu de générer un sous-shell. Ainsi, tout, y compris la sortie, affectera le shell actuel.

Au lieu d'utiliser exit , vous voudrez utiliser return .


Vous pouvez ajouter une commande de sortie supplémentaire après l'instruction/commande de retour afin qu'elle fonctionne pour les deux, en exécutant le script à partir de la ligne de commande et en s'approvisionnant depuis le terminal.

Exemple de code de sortie dans le script :

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

La ligne avec le exit la commande ne sera pas appelée lorsque vous sourcez le script après le return commande.

Lorsque vous exécutez le script, return commande donne une erreur. Donc, nous supprimons le message d'erreur en le transmettant à /dev/null .


Linux
  1. La différence entre les opérateurs bash [[ Vs [ Vs ( Vs ((?

  2. La "bonne" façon de tester si un service s'exécute dans un script ?

  3. Comment arrêter le script Loop Bash dans le terminal ?

  4. Pourquoi le parent Shell Here-document ne fonctionne pas pour la sous-commande dans Dash mais Bash fonctionne?

  5. Quelle est la meilleure façon de s'assurer qu'une seule instance d'un script Bash est en cours d'exécution ?

Bash Echo La ligne de commande exécutée sur la ligne de commande elle-même (pas dans un script) ?

Pourquoi le script Bash ne se ferme-t-il pas après l'exécution ?

Pourquoi ce "pendant la lecture" fonctionne-t-il dans un terminal, mais pas dans un script shell ?

Obtenir tous les fichiers sauf les fichiers du tableau - Bash ?

Bash + Comment quitter le script secondaire et le script principal à chaque fois ?

Commande Conda fonctionnant dans l'invite de commande mais pas dans le script bash