首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash测试,查看脚本是否正在某个目录中使用别名运行,而不是使用字符串匹配

bash测试,查看脚本是否正在某个目录中使用别名运行,而不是使用字符串匹配
EN

Stack Overflow用户
提问于 2019-02-25 17:40:58
回答 1查看 37关注 0票数 0

我有一个为公共代码编写的bash脚本,我希望确保用户不会直接在git存储库(或其子目录)中运行该脚本。我有一个指向存储库位置的环境变量CODELIB,并且我以以下方式测试字符串匹配,使用通配符捕获子目录:

代码语言:javascript
复制
if [[ `pwd` == *${CODELIB}* ]]; then
  echo "error: do not run in your git repository " $CODELIB
  exit 1
fi

这在大多数情况下都工作得很好,但是如果用户将他们的代码放在$HOME的子目录中,有时会被发现,因为我的雇主使用AFS,并且似乎有别名的使用,对于一些用户来说,安装主页是这样的

代码语言:javascript
复制
cd $HOME
pwd

给出了这个

代码语言:javascript
复制
/afs/xyz.it/home/t/user/

而不是这个

代码语言:javascript
复制
/afs/xyz/home/t/user/

因为变量CODELIB指向

代码语言:javascript
复制
/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都是基于字符串匹配的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 17:54:41

您可以在这两个目录上使用realpath

代码语言:javascript
复制
if [[ "$(realpath "$(pwd)")"/ == "$(realpath "${CODELIB}")"/* ]]; then

如果realpath不可用,但perl可用:

代码语言:javascript
复制
realpath(){
    perl -MCwd -e 'print Cwd::realpath($ARGV[0])' "$1"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54863250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档