Makefileの次の行では、エラーが発生します
Syntax error: end of file unexpected (expecting "then")
コード:
if [ ! -d upload-api/app-router/ ] then
git clone someRepo upload-api/app-router/
fi
括弧の後にセミコロンを試しましたが、まだ同じエラーが発生します
次に、次の行に入力するか、セミコロンを使用する必要があります
if [ ! -d upload-api/app-router/ ]
then
または
if [ ! -d upload-api/app-router/ ];then
メイクファイルのコンテキストでは、2つのことがわかります。
まず、then
の前にセミコロンまたは改行が必要です。 if
のシェル構文は、次のようになります。if commands... ; then commands... ; fi
(ここでセミコロンを改行に置き換えることができます)。
2番目に、make
がレシピを実行すると、個別のシェルインスタンスでレシピの各行が実行され、1行でもエラーが発生した場合は実行が停止します。事実上、実行されています:
sh -c 'if [ ! -d upload-api/app-router/ ]; then' &&
sh -c 'git clone someRepo upload-api/app-router/' &&
sh -c 'fi'
...これは、if
が終了しないため、セミコロンの有無にかかわらず、最初の行の構文エラーです。
したがって、メイクファイルレシピの場合、make
にif ... fi
ブロック全体を1行として処理する必要があることを知らせる必要があります。たとえば、行の継続にはバックスラッシュを使用し、シェルには改行が表示されないため、適切な場所にセミコロンを使用します。
my-target:
↦ if [ ! -d upload-api/app-router/ ] ; then \
↦ git clone someRepo upload-api/app-router/ ; \
↦ fi
これは非常に手に負えないので、私が好む解決策は通常、シェルスクリプトを別のファイルに入れてから、そのファイルをレシピから実行することです。