Return an exit code without closing shell

前端 未结 5 1056
后悔当初
后悔当初 2021-01-01 12:39

I\'d like to return an exit code from a BASH script that is called within another script, but could also be called directly. It roughly looks like this:

#!/b         


        
5条回答
  •  借酒劲吻你
    2021-01-01 12:51

    You can use return if you use set -e in the beginning of the script.

    If you just want to check if the function returned no errors, I'd rather suggest rewriting your code like this:

    #!/bin/bash
    
    set -e # exit program if encountered errors
    
    dq2-get ()
    {
      # define the function here
      # ...
      if [ $1 -eq 0 ]
      then
        return 0
      else
        return 255
      # Note that nothing will execute from this point on,
      # because `return` terminates the function.
    }
    
    # ...
    # lots of code ...
    # ...
    
    # Now, the test:
    # This won't exit the program.
    if $(dq2-get $1); then
      echo "No errors, everything's fine"
    else
      echo "ERROR: ..."
    fi
    # These commands execute anyway, no matter what
    # `dq2-get $1` returns (i.e. {0..255}).
    # extract, do some stuff
    # ...
    

    Now, the code above won't leave the program if the function dq2-get $1 returns errors. But, implementing the function all by itself will exit the program because of the set -e. The code below describes this situation:

    # The function below will stop the program and exit
    # if it returns anything other than `0`
    # since `set -e` means stop if encountered any errors.
    $(dq2-get $1)
    # These commands execute ONLY if `dq2-get $1` returns `0`
    # extract, do some stuff
    # ...
    

提交回复
热议问题