157 votes

Comment quitter une fonction en bash

Comment sortir d'une fonction si une condition est vraie sans tuer l'ensemble du script, il suffit de revenir avant d'avoir appelé la fonction.

Exemple

# Start script
Do scripty stuff here
Ok now lets call FUNCT
FUNCT
Here is A to come back to

function FUNCT {
  if [ blah is false ]; then
    exit the function and go up to A
  else
    keep running the function
  fi
}

208voto

mohit Points 5088

Utilisez :

return [n]

De help return

retourner : retour [n]

Return from a shell function.

Causes a function or sourced script to exit with the return value
specified by N.  If N is omitted, the return status is that of the
last command executed within the function or script.

Exit Status:
Returns N, or failure if the shell is not executing a function or script.

31voto

Nemanja Boric Points 11853

Utilisez return opérateur :

function FUNCT {
  if [ blah is false ]; then
    return 1 # or return 0, or even you can omit the argument.
  else
    keep running the function
  fi
}

4voto

3noch Points 1904

Si vous voulez revenir d'un extérieur avec une erreur sans exit vous pouvez utiliser cette astuce :

do-something-complex() {
  # Using `return` here would only return from `fail`, not from `do-something-complex`.
  # Using `exit` would close the entire shell.
  # So we (ab)use a different feature. :)
  fail() { : "${__fail_fast:?$1}"; }

  nested-func() {
      try-this || fail "This didn't work"
      try-that || fail "That didn't work"
  }
  nested-func
}

Je l'essaie :

$ do-something-complex
try-this: command not found
bash: __fail_fast: This didn't work

L'avantage/le désavantage supplémentaire est que vous pouvez désactiver cette fonction de manière facultative : __fail_fast=x do-something-complex .

Notez que cela fait en sorte que la fonction la plus extérieure renvoie 1.

0voto

nroose Points 135

Mon cas d'utilisation est d'exécuter la fonction à moins qu'elle ne soit déjà en cours d'exécution. Je suis en train de faire

mkdir /tmp/nice_exit || return 0

Et ensuite, à la fin de la fonction

rm -rf /tmp/nice_exit

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X