2017-01-22 7 views
0

私は広範な検索を行い、多くの同様の質問がありましたが、実際に私が望んだことは見つけられませんでした。ここでMakefileでsedを使って何かを変数に置き換える

最も近い質問さ:Using sed in a makefile; how to escape variables?

私はMakefileの内部で何をしたいのかの非常に単純化されたバージョンは$BARが私のメイクファイル内の変数である

sed s~foo~${BAR}~ 

です。明らかに、fooの値の代わりに$BARに置き換えたいのですが、現在のテキスト${BAR}は現在行われていません。

これは完全版です:
目的は、MakefileをPOSIXにすることです。

のMakefile(関連部分のみ):

... 
diff: 
    scripts/build/diff-all.sh 
... 

スクリプト/構築/ diff-all.sh

#!/bin/bash -e 

for DIFFBRANCH in $(cat diff-branches); do 
    scripts/build/diff.sh $DIFFBRANCH 
done 

デフ支店

2016_reorg_diff 
# more branches here 

スクリプト/ /差分を構築します。 sh

#/bin/bash -e 

DIFFBRANCH=$1 
BRANCH=$(git rev-parse --abbrev-ref HEAD) 
CHAPTERDIR=src/chapters 
SHORTCHAPTERDIR=${CHAPTERDIR##src/} # remove src/ from the start of CHAPTERDIR 
CHAPTERS=$(ls $CHAPTERDIR | grep "^\\d\\d_.*\\.tex$") 

LATEXARGS="-file-line-error -halt-on-error" 

if [[ ! $DIFFBRANCH ]]; then 
    echo "usage: $0 DIFFBRANCH" 
    exit 1 
fi 

mkdir -p tmp 
mkdir -p pdf 

for CHAPTER in $CHAPTERS; do # make tex diff files for each chapter 
    SLUG=$(echo $CHAPTER | cut -f 1 -d '.') 
    latexdiff-vc --git --so --flatten --force -r $DIFFBRANCH -r $BRANCH $CHAPTERDIR/$CHAPTER 
    mkdir -p tmp/$CHAPTERDIR 
    mv -v $CHAPTERDIR/$SLUG-diff$DIFFBRANCH-$BRANCH.tex tmp/src_diff_$DIFFBRANCH/$SHORTCHAPTERDIR/$SLUG-$BRANCH-diff-$DIFFBRANCH.tex 
done 

rsync -avz --exclude $SHORTCHAPTERDIR src/ tmp/src_diff_$DIFFBRANCH/ # copy all source files to tmp except chapters (because they're already there) 

sed -i.bak -E 's~^([[:blank:]]*\subimport{chapters/}{[[:alnum:]_]+)}~\1-$BRANCH-diff-$DIFFBRANCH}~' tmp/src_diff_$DIFFBRANCH/iuf-rulebook.tex 
# this replaces \subimport{chapters/}{01_general} with \subimport{chapters/}{01_general-$BRANCH-diff-$DIFFBRANCH} with the variables expanded 
# so that the iuf-rulebook.tex uses the diffed chapters 
# the -i.bak is required so SED works on OSX and Linux 
rm -f tmp/src_diff_$DIFFBRANCH/*.bak # because of this, we have to delete the .bak files after 


mkdir -p tmp/out_diff_$DIFFBRANCH 
TEXINPUTS=tmp/src_diff_$DIFFBRANCH: latexmk -pdf $LATEXARGS -quiet -output-directory=./tmp/out_diff_$DIFFBRANCH tmp/src_diff_$DIFFBRANCH/iuf-rulebook.tex 
mv tmp/out_diff_$DIFFBRANCH/iuf-rulebook.pdf pdf/iuf-rulebook-$BRANCH-diff-$DIFFBRANCH.pdf 
rm -rf tmp/*_$DIFFBRANCH 
+2

それはあなたの "テキスト$ {} BARでない" 何を意味するかは不明です。あなたがリンクした質問は、私があなたが尋ねていると思っていることをかなり示しています。 '$ {BAR} '〜g''はうまくいくはずです... –

+0

@ l'L'lいいえ、$ {BAR}にはチルダ、スペース、タブを含めることができませんそのうちあなたの代理は失敗するでしょう。 – Jens

+0

あなたのMakefile、特にBARへの割り当てと、sedを使うターゲット/ルールを教えてください。結果として得られるテキストと実際の結果を記述します。 – Jens

答えて

0

コマンド:

sed -e s/number/$(BAR)/g 

確認するには:

VAR = random number 
VAR1 = file 
FOO = $(VAR) 
$(info before substitution: $(FOO)) 
FOO = $(shell echo $(VAR) | sed -e s/number/$(VAR1)/g) 
$(info after substitution: $(FOO)) 
関連する問題