我试图找出在启动时运行的服务脚本的名称.之后我需要名称来调用默认脚本.
我不能提前假设这个名字,这就是为什么我必须在执行期间得到它.
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