У меня есть скрипт bash, который я пишу для открытого кода, и я хочу убедиться, что пользователь не запускает скрипт непосредственно в репозитории git (или его подкаталоге).У меня есть переменная окружения CODELIB, которая указывает на местоположение репозитория, и я проверяла соответствие строк следующим образом, с подстановочными знаками для перехвата подкаталогов:
if [[ `pwd` == *${CODELIB}* ]]; then
echo "error: do not run in your git repository " $CODELIB
exit 1
fi
В большинстве случаев это прекрасно работает, но иногда перехватываетсяЕсли пользователь использует свой код в подкаталоге $ HOME, как мой работодатель, использующий AFS, и, кажется, существует использование псевдонимов, так что для некоторых пользователей дом смонтирован так, что
cd $HOME
pwd
дает это
/afs/xyz.it/home/t/user/
вместо этого
/afs/xyz/home/t/user/
Поскольку переменная CODELIB указывает на
/afs/xyz/home/t/user/code_location
, мой тест в этом случае не пройден.Поэтому мне было интересно, есть ли в bash встроенная функция, которая могла бы более надежно проверить, является ли каталог подкаталогом другого, не прибегая к сопоставлению строк.
Решения, которые я нашел здесь: https://unix.stackexchange.com/questions/6435/how-to-check-if-pwd-is-a-subdirectory-of-a-given-path быливсе на основе соответствия строк