gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:14:34 26 4
gpt4 key购买 nike

我试图找出哪个是启动时运行的服务脚本的名称。之后我需要调用默认脚本的名称。

我不能预先假定名称,这就是为什么我必须在执行过程中获取它。

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

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

我尝试了不同的方法:

  • 使用 $BASH_SOURCE
  • 使用基名 $0
  • 使用特定于 bash 的变量 ${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 符号链接(symbolic link)名称。我已经编写了一个简单的解决方法,并且知道它似乎可以独立工作,它是从 rc 符号链接(symbolic link)或服务本身执行的。

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 - 在 init.d 中获取服务名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com