有人可以告诉我下面的代码意味着什么吗?
NAME=`basename $0`
unset ISBOOT
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
NAME=${NAME:3}
ISBOOT=1
fi
这是在 tomcat 启动脚本中,这些行的确切含义是什么?
答案1
如果正在运行的脚本 ($NAME) 的文件名(没有任何路径)以“S”或“K”开头,则:
- 砍掉 $NAME 的前三个字符
- 将 $ISBOOT 设置为 1
这实际上意味着什么,谁也说不准。您必须检查脚本本身以找出它对这些变量的作用。
我猜想“S”和“K”很重要,因为该脚本可能是 /etc/rc?.d/ 下的 init.d 脚本 - 这些脚本使用以“S”开头的符号链接名称,以便在运行级别正在启动(例如启动),“K”表示脚本在运行级别结束(例如关机)时启动。 S=开始,K=杀死。
它会截掉文件名的前三个字符,因为符号链接通常命名为“S05scriptname”和“K10scriptname”,其中数字表示命令该脚本将被执行。所以“S01foo”在“S99bar”之前运行
因此,最重要的是获取脚本的名称,而无需 sysv rc 脚本命名内容。
可能是因为它是一个脚本,根据调用它的名称来执行不同的操作。
同样,您必须检查脚本以根据其名称以及 ISBOOT==1 来了解它的作用。
答案2
可以将该脚本复制到 /etc/init.d,然后软链接到 /etc/rc.d 目录的子文件夹之一。它通常链接两次 - 一次以“ S
”作为链接名称的第一个字母,第二次以“ K
”作为链接名称的第一个字母。名称开头的链接S
在启动期间执行,而名称开头的链接K
在关机期间执行。第一个字母后面的 2 位数字将决定所有启动或所有关闭脚本的执行顺序。 S 链接和 K 链接都链接到同一脚本是很常见的。您要求的脚本部分基本上是检查它是否作为启动或关闭时间脚本运行 - 它也可以交互运行,因此它可以做出相应的操作。
NAME=`basename $0`
该行获取脚本的名称(或本例中的链接)并将其写入NAME
变量。
unset ISBOOT
该行取消设置ISBOOT
变量的任何值。
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
NAME
此行检查变量中值的第一个字母是否为S
or K
。
then
NAME=${NAME:3}
ISBOOT=1
fi
如果这是 true,它将截断名称的前 3 个字母(S
或K
字母和 2 位数字)并将ISBOOT
变量设置为“ 1
”的值。