在bash中,是否有相同的模具“错误信息”

时间:2011-10-23 20:02:50

标签: bash shell

在perl中,您可以使用die "some msg"的错误消息退出。在bash中是否有相同的单个命令?现在,我正在使用命令实现此目的:echo "some msg" && exit 1

5 个答案:

答案 0 :(得分:63)

你可以轻松地自己动手:

die() { echo "$*" 1>&2 ; exit 1; }
...
die "Kaboom"

答案 1 :(得分:24)

这是我正在使用的。它太小了,无法放入图书馆,所以我必须输入数百次......

warn () {
    echo "$0:" "$@" >&2
}
die () {
    rc=$1
    shift
    warn "$@"
    exit $rc
}

用法:die 127 "Syntax error"

答案 2 :(得分:11)

这是perl“die”的一个非常接近的函数(但是带有函数名):

function die
{
    local message=$1
    [ -z "$message" ] && message="Died"
    echo "$message at ${BASH_SOURCE[1]}:${FUNCNAME[1]} line ${BASH_LINENO[0]}." >&2
    exit 1
}

如果内置函数失败(带有函数名),那么bash的死亡方式

function die
{
    local message=$1
    [ -z "$message" ] && message="Died"
    echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: ${FUNCNAME[1]}: $message." >&2
    exit 1
}

因此,Bash将所有需要的信息保存在几个环境变量中:

  • LINENO - 当前执行的行号
  • FUNCNAME - 调用函数堆栈,第一个元素(索引0)是当前函数,第二个(索引1)是调用当前函数的函数
  • BASH_LINENO - 调用行号堆栈,其中调用相应的FUNCNAME
  • BASH_SOURCE - 源文件数组,其中存储了对应的FUNCNAME

答案 3 :(得分:3)

是的,这就是你如何做到的。

您可以使用分号或换行符代替&&,因为您想要退出是否成功(尽管我不确定会导致失败的原因)。

在shell中编程意味着使用许多小命令(一些内置命令,一些小程序),它们可以很好地完成一件事,并将它们与文件重定向,退出代码逻辑和其他粘合剂连接起来。

如果你习惯于使用函数或方法完成所有事情的语言,但是你已经习惯了它,这似乎很奇怪。

答案 4 :(得分:0)

# echo pass params and print them to a log file
wlog(){
    # check terminal if exists echo 
    test -t 1 && echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*"
    # check LogFile and 
    test -z $LogFile || {
      echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*" >> $LogFile
    } #eof test
 } 
# eof function wlog 


# exit with passed status and message
Exit(){
    ExitStatus=0
    case $1 in
      [0-9]) ExitStatus="$1"; shift 1;;
  esac
    Msg="$*"
    test "$ExitStatus" = "0" || Msg=" ERROR: $Msg : $@"
    wlog " $Msg"
    exit $ExitStatus
}
#eof function Exit