在init.d中获取服务名称

时间:2015-04-20 11:07:35

标签: 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。

感谢。

1 个答案:

答案 0 :(得分:2)

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

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