假设您有以下目录结构:
# directory structure
├── GIT-REPO
│ ├── dev
│ ├── production
│ ├── mgmt
我正在Makefile中寻找一种方法来根据它所在的目录查找环境。我找到了一种方法在bash中执行以下操作:
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IFS='/' read -r -a DIR_ARRAY <<< "$DIR"
GIT_REPO=some-repo
for ((i=0; i < ${#DIR_ARRAY[@]}; i++)) do
if [ "${DIR_ARRAY[$i]}" = "$GIT_REPO" ] ; then
echo ${DIR_ARRAY[$i+1]}
fi
done
但是我很难将其翻译成Makefile。每个环境目录都有一个Makefile以及子目录。我希望能够通过查找$ GIT_REPO目录右侧目录的名称来动态查找它所处的环境。
答案 0 :(得分:0)
以下是一个例子:
/home/user/git_repo/mgmt
/home/user/git_repo/prod
/home/user/git_repo/prod/application/
/home/user/git_repo/dev/
/home/user/my_source_files/git_repo/prod/application
您会看到一些相似之处,但目录的总长度不同。它们共享git_repo
并且都包含environment
(prod,dev,mgmt)。在上面每个目录的顶层是Makefile
,我想在其中提取environment
。我的bash示例比我需要它复杂得多,可以使用sed
代替。这就是我现在的Makefile
:
GIT_REPO="my_repo"
ENV=$(shell pwd | sed "s/^.*\/$(GIT_REPO)\///" | cut -d / -f 1)
这样做的目的是查找Git存储库文本并删除存储库名称和之前的任何根目录。然后我们应用剪切并将其与&#39; /&#39;路径并抓住第一个元素。这将始终返回环境文件夹。
我有一个非常具体的用例,我希望在Makefile中动态获取环境,而不是每次都静态定义它。