Что этот код делает в 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
находиться в том же каталоге, в котором установлен скрипт, а не в текущем каталоге.