Что этот код делает в bash?

Я пытаюсь изменить сценарий кто-то, и есть определенная часть, которая действительно смущает меня. Похоже ниже.

if [[ ! -f "${0%/*}/somefile" ]]; then
    echo "Cannot find somefile, quiting..." >&2
    exit 1
else
    source "${0%/*}/somefile"
fi

Я знаю, что он проверяет наличие файла и использует этот код ${0%/*} чтобы попытаться получить текущий каталог, однако он не работает для меня. Мой способ исправить это было заменить его pwd который работает намного лучше.

Мне просто интересно, если кто-нибудь может объяснить мне, что эта часть кода ${0%/*} пытался сделать?

1 ответ

Решение

Он не пытается получить текущий каталог, он пытается получить каталог, содержащий скрипт. $0 это имя сценария, а %/* Модификатор удаляет все из последнего / в этом.

Этот сценарий ожидает somefile находиться в том же каталоге, в котором установлен скрипт, а не в текущем каталоге.

Другие вопросы по тегам