Как я могу получить имя скрипта, выполняемого в 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]}
Другие вопросы по тегам