在perl中,您可以使用die "some msg"
的错误消息退出。在bash中是否有相同的单个命令?现在,我正在使用命令实现此目的:echo "some msg" && exit 1
答案 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将所有需要的信息保存在几个环境变量中:
答案 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