Как я могу получить имя скрипта, выполняемого в bash?
Поэтому я пытаюсь создать переносимый файл bashrc/bash_profile. У меня есть один скрипт, который я символически связываю с.bashrc,.bash_profile и т. Д. Затем я смотрю на $0
и переключение того, что я делаю, основываясь на том, какой скрипт был вызван. Проблема в том, что оболочка вызывает скрипт bashrc, конечно, он действительно выполняет bash, что означает $0
для меня это -bash
, $1
далее больше не задано имя скрипта.
Итак, мой вопрос в bash, как я могу получить имя выполняемого скрипта. Не исполняющий его двоичный файл, например bash?
Я предполагаю, что это дает мне -bash
с $1
не устанавливается, потому что это действительно не новый процесс. Есть идеи?
3 ответа
Переменная BASH_ARGV
должно работать, кажется, сценарий находится в процессе
$BASH_ARGV
Пытаться:
readlink -f ${BASH_SOURCE[0]}
или просто:
${BASH_SOURCE[0]}
,
Замечания:
$0
работает только когда пользователь выполняет "./script.sh"
$BASH_ARGV
работает только тогда, когда пользователь выполняет ". script.sh" или "source script.sh"
${BASH_SOURCE[0]}
работает в обоих случаях.
readlink -f
полезно, когда используется символическая ссылка.
создайте файл .sh, скажем, view.sh, затем поместите
#!/bin/bash
echo "The script is being executed..."
readlink -f ${BASH_SOURCE[0]}