EL 5 上 /etc/init.d/functions 中声明的含义
Posted
技术标签:
【中文标题】EL 5 上 /etc/init.d/functions 中声明的含义【英文标题】:Meaning of declarations in /etc/init.d/functions on EL 5 【发布时间】:2014-06-05 06:53:47 【问题描述】:当谈到 Bash shell 脚本时,我是个业余爱好者,并且对 CentOS 5.10 系统上 /etc/init.d/functions 中 killproc() 函数的第一行感到困惑:
local RC killlevel= base pid pid_file= delay try
那条线是什么意思?我相信这可能是局部变量的声明,但是在几个项目之后 = 的含义是什么?我在下面包含了完整的 killproc() 函数以供参考:
# A function to stop a program.
killproc()
local RC killlevel= base pid pid_file= delay try
RC=0; delay=3; try=0
# Test syntax.
if [ "$#" -eq 0 ]; then
echo $"Usage: killproc [-p pidfile] [ -d delay] program [-signal]"
return 1
fi
if [ "$1" = "-p" ]; then
pid_file=$2
shift 2
fi
if [ "$1" = "-d" ]; then
delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 'if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1 END printf("%d",delay+0.5)')
if [ "$?" -eq 1 ]; then
echo $"Usage: killproc [-p pidfile] [ -d delay] program [-signal]"
return 1
fi
shift 2
fi
# check for second arg to be kill level
[ -n "$2:-" ] && killlevel=$2
# Save basename.
base=$1##*/
# Find pid.
__pids_var_run "$1" "$pid_file"
if [ -z "$pid_file" -a -z "$pid" ]; then
pid="$(__pids_pidof "$1")"
fi
# Kill it.
if [ -n "$pid" ] ; then
[ "$BOOTUP" = "verbose" -a -z "$LSB:-" ] && echo -n "$base "
if [ -z "$killlevel" ] ; then
if checkpid $pid 2>&1; then
# TERM first, then KILL if not dead
kill -TERM $pid >/dev/null 2>&1
usleep 100000
if checkpid $pid ; then
try=0
while [ $try -lt $delay ] ; do
checkpid $pid || break
sleep 1
let try+=1
done
if checkpid $pid ; then
kill -KILL $pid >/dev/null 2>&1
usleep 100000
fi
fi
fi
checkpid $pid
RC=$?
[ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
RC=$((! $RC))
# use specified level only
else
if checkpid $pid; then
kill $killlevel $pid >/dev/null 2>&1
RC=$?
[ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"
elif [ -n "$LSB:-" ]; then
RC=7 # Program is not running
fi
fi
else
if [ -n "$LSB:-" -a -n "$killlevel" ]; then
RC=7 # Program is not running
else
failure $"$base shutdown"
RC=0
fi
fi
# Remove pid file if any.
if [ -z "$killlevel" ]; then
rm -f "$pid_file:-/var/run/$base.pid"
fi
return $RC
【问题讨论】:
【参考方案1】:它只是声明了很多函数范围变量,其中killlevel
和pid_file
被分配了空字符串,而其他的则没有分配任何东西。
略有不同。 local
变量在从函数调用的函数中也可见。因此,如果您碰巧以递归方式调用killproc()
,则会从调用者那里记住未初始化的那些。
在 Debian 上,lib/lsb/init-functions
文件如下所示:
killproc()
local pidfile sig status base name_param is_term_sig OPTIND
pidfile=
name_param=
is_term_sig=
【讨论】:
而here 是来自 bash 手册的参考。以上是关于EL 5 上 /etc/init.d/functions 中声明的含义的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac OS X El Capitan 10.11.4 上安装 MySQL 5.7
用rpm包在centos7.4上安装mysql-5.7.29-1.el7.x86_64