Я пытаюсь выяснить, как называется сервисный скрипт, который запускается при запуске. Мне нужно имя для последующего вызова сценария по умолчанию.
Я не могу придумать имя заранее, поэтому я должен получить его во время его выполнения.
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##*/}
Все они работают, если я запускаю скрипт вручную из оболочки, но не после перезагрузки. Я предполагаю, что init.d запускает процесс по-другому.
Я использую Debian Lenny (знаю, довольно старый...) и bash v3.2.39. Я открыт для использования другого типа оболочки, если это необходимо.
Спасибо.
BASH_SOURCE
потерпит неудачу, поскольку сценарий, скорее всего, запускается/bin/sh
, и поэтому эта переменная, вероятно, не была установлена. Но я ожидал, что использование$0
сработает (хотя есть префиксS##
илиK##
, с которым вам придется иметь дело). - person Etan Reisner   schedule 20.04.2015