我有一个为公共代码编写的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都是基于字符串匹配的
发布于 2019-02-25 17:54:41
您可以在这两个目录上使用realpath。
if [[ "$(realpath "$(pwd)")"/ == "$(realpath "${CODELIB}")"/* ]]; then如果realpath不可用,但perl可用:
realpath(){
perl -MCwd -e 'print Cwd::realpath($ARGV[0])' "$1"
}https://stackoverflow.com/questions/54863250
复制相似问题