Bash 语法错误,缺少“then”

Bash 语法错误,缺少“then”

对于 Makefile 中的以下几行,我收到错误

Syntax error: end of file unexpected (expecting "then")

代码:

if [ ! -d upload-api/app-router/ ] then
    git clone someRepo upload-api/app-router/
fi

我尝试在括号后加上分号,但仍然出现相同的错误

答案1

您需要将 then 放在下一行或使用分号

if [ ! -d upload-api/app-router/ ] 
then

或者

if [ ! -d upload-api/app-router/ ];then

答案2

在 makefile 的上下文中,我看到两件事。

首先,你需要在 之前有一个分号或换行符then。 的 Shell 语法if如下:if commands... ; then commands... ; fi(这里的任何分号都可以用换行符替换)。

其次,执行配方时make,它会在单独的 shell 实例中运行配方的每一行,如果任何一行出现错误,它就会停止执行。实际上,它正在运行:

sh -c 'if [ ! -d upload-api/app-router/ ]; then' &&
    sh -c 'git clone someRepo upload-api/app-router/' &&
    sh -c 'fi'

...第一行有语法错误,无论有没有分号,因为if永远不会完成。

因此,对于 makefile 配方,您需要告知make它应将整个if ... fi块视为一行。例如,使用反斜杠表示行延续,并在适当的位置使用分号,因为 shell 不会看到任何换行符。

my-target:
↦       if [ ! -d upload-api/app-router/ ] ; then \
↦           git clone someRepo upload-api/app-router/ ; \
↦       fi

这很快就会变得难以处理,因此我通常首选的解决方案是将 shellscript 放在单独的文件中,然后根据配方运行该文件。

相关内容