2016-10-05 6 views
0

を分割するには、次のようなディレクトリ構造を持っていたと言う:のMakefile:読み込み/配列

# 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

この質問は非常に不明です(私にとって)。 gitの理解に依存する場合は、 'git'タグを追加してください。 – Beta

答えて

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のリポジトリのテキストを探して、リポジトリ名とその前の任意のルートディレクトリを削除されるでしょう。次に、カットを適用し、 '/'パスで区切り、最初の要素を取得します。これは常に環境フォルダを返します。

私は、毎回静的に定義するのではなく、自分のMakefileで環境を動的に取得したいという非常に特殊な使用例があります。

関連する問題