bash – 在init.d中获取服务名称

我试图找出在启动时运行的服务脚本的名称.之后我需要名称来调用默认脚本.

我不能提前假设这个名字,这就是为什么我必须在执行期间得到它.

NAME=${0##*/}
SCRIPTNAME=/etc/init.d/$NAME

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

我尝试了不同的方法:

>使用$BASH_SOURCE
>使用basename $0
>使用特定于bash的var ${0 ## * /}

如果我从shell手动运行脚本但不重启后,它们都可以工作.我想init.d启动过程的方式不同.

我正在使用Debian Lenny(我知道,很老……)和bash v3.2.39.如有必要,我打开使用其他类型的shell.

谢谢.

最佳答案 我写了一些额外的代码来确切地知道每个变量的价值,我发现了令人兴奋的惊喜.

BASH_SOURCE:/etc/rc2.d/S99iap_FA_iapfa

$0:/etc/rc2.d/S99iap_FA_iapfa

${0 ## * /}:S99iap_FA_iapfa

Vars不是空的,而是rc符号链接名称.我写了一个简单的解决方法,并且知道它似乎独立工作,它是从rc符号链接或服务本身执行的.

RC_NAME=${0##*/}
NAME="${RC_NAME#[SK][0-9][0-9]}"

SCRIPTNAME=/etc/init.d/$NAME

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
点赞