Bash 在init.d中获取服务名称

Bash 在init.d中获取服务名称,bash,init.d,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\u源代码 使用

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

我不能预先假定它的名字,这就是为什么我必须在它执行时得到它

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

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
我尝试过不同的方法:

  • 使用$BASH\u源代码
  • 使用basename$0
  • 使用特定于bash的var${0##*/}
如果我从shell手动运行脚本,而不是在重新启动后运行脚本,所有这些都可以工作。我认为init.d启动过程是以不同的方式进行的

我正在使用Debian Lenny(我知道,相当老了…)和bash v3.2.39。如果需要,我可以使用其他类型的外壳


谢谢。

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

BASH_SOURCE:/etc/rc2.d/S99iap_FA_iapfa

$0:/etc/rc2.d/S99iap_FA_iapfa

${0##*/}:S99iap_FA_iapfa

变量不是空的,而是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

他们怎么都失败了?我预计
BASH_SOURCE
会失败,因为脚本可能是由
/bin/sh
运行的,因此该变量可能没有设置。但是我本来希望使用
$0
来工作(尽管你需要处理
S##
K##
前缀),我真的不明白你想要什么@你呢?你能给我解释一下吗?谢谢!!我用新的答案回答,以便有更好的格式。