Differences between revisions 17 and 21 (spanning 4 versions)
Revision 17 as of 2010-07-29 16:28:21
Size: 1221
Editor: GreyCat
Comment:
Revision 21 as of 2014-08-13 06:13:22
Size: 1804
Editor: 94
Comment:
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
# Usage: warn "message" # Usage: warn "format" ["arguments"...]
Line 11: Line 11:
  printf '%s\n' "$@" >&2   local fmt="$1"
  shift
  printf "script_name: $fmt\n" "$@" >&2
Line 23: Line 25:
# Usage: some_command || die "message" # Usage: some_command || die "message" ["arguments"...]
Line 34: Line 36:
# Usage: if blah; then die "message" status_code; fi # Usage: if blah; then die status_code "message" ["arguments"...]; fi
Line 37: Line 39:
  local st="$2"
  warn "$1"
  local st="$1"
  shift

  warn "$@"
Line 40: Line 43:
}

##
# die (optional status version): Print a message to
# stderr and exit with either the given status or
# that of the most recent command.
# Usage: some_command || die [status code] "message" ["arguments"...]
#
die() {
  local st="$?"
  if [[ "$1" != *[^0-9]* ]]; then
    st="$1"
    shift
  fi
  warn "$@"
  exit "$st"
}
}}}


{{{
##
# warn: Print a message to stderr.
# Usage: warn "message"
#
warn() {
  printf '%s\n' "${BASH_SOURCE##*/}: $@" >&2
Line 48: Line 78:
Line 49: Line 80:
  local st="$?"
  case "$2" in
    *[^0-9]*) :;;
    *) st="$2";;
  local st=$?
  case $2 in
    *[^0-9]*|'') :;;
    *) st=$2;;
Line 56: Line 87:
} } 

Common utility functions (warn, die)

(If you were looking for option processing, see BashFAQ/035.) The following functions are frequently asked for in #bash, so we hope you find them useful.

##
# warn: Print a message to stderr.
# Usage: warn "format" ["arguments"...]
#
warn() {
  local fmt="$1"
  shift
  printf "script_name: $fmt\n" "$@" >&2
}

###
### The following three "die" functions
### depend on the above "warn" function.
###

##
# die (simple version): Print a message to stderr
# and exit with the exit status of the most recent
# command.
# Usage: some_command || die "message" ["arguments"...]
#
die () {
  local st="$?"
  warn "$@"
  exit "$st"
}

##
# die (explicit status version): Print a message to
# stderr and exit with the exit status given.
# Usage: if blah; then die status_code "message" ["arguments"...]; fi
#
die() {
  local st="$1"
  shift
  warn "$@"
  exit "$st"
}

##
# die (optional status version): Print a message to
# stderr and exit with either the given status or
# that of the most recent command.
# Usage: some_command || die [status code] "message" ["arguments"...]
#
die() {
  local st="$?"
  if [[ "$1" != *[^0-9]* ]]; then
    st="$1"
    shift
  fi
  warn "$@"
  exit "$st"
}

##
# warn: Print a message to stderr.
# Usage: warn "message"
#
warn() {
  printf '%s\n' "${BASH_SOURCE##*/}: $@" >&2
}

##
# die (optional status version): Print a message to
# stderr and exit with either the given status or
# that of the most recent command.
# Usage: some_command || die "message" [status code]
#

die() {
  local st=$?
  case $2 in
    *[^0-9]*|'') :;;
    *) st=$2;;
  esac
  warn "$1"
  exit "$st"
} 


CategoryShell

BashFAQ/101 (last edited 2020-02-04 18:35:41 by GreyCat)