if/else/fi && 语法错误

if/else/fi && 语法错误

我试图在 if/else/fi 之后链接一个附加命令,但出现语法错误。

这是我所得到的:

mkdir -p storage/app storage/framework/cache storage/framework/sessions storage/framework/views storage/logs bootstrap/cache \
&& if [ "$ENV" = "production" ] ; then \
    composer install \
; else \
    composer install --no-suggest --optimize-autoloader --classmap-authoritative --no-scripts --no-dev --no-cache \
fi ; \
&& chown -R 33:33 . && chmod -R a-sx,ug=rwX,o=rX . && chmod ug+x ./artisan

错误是

/bin/sh: 1: 语法错误:“&&”意外

有什么办法可以链接这个吗?

它会进入 Dockerfile,所以我试图尽量减少行数。

答案1

命令不能以 开头&&,这是命令之前的内容 chown

该命令是&& chown ...因为前面的;.

如果没有;,则将chown根据if复合命令的退出状态执行。

如果没有大多数相当令人困惑的行延续,您的(更正后的)代码看起来像

mkdir -p storage/app storage/framework/cache storage/framework/sessions \
         storage/framework/views storage/logs bootstrap/cache &&
if [ "$environment" = "production" ]; then
    composer install
else
    composer install --no-suggest --optimize-autoloader \
        --classmap-authoritative --no-scripts --no-dev --no-cache
fi &&
chown -R 33:33 . &&
chmod -R a-sx,ug=rwX,o=rX . &&
chmod ug+x ./artisan

$ENV另请注意我对 的更改$environmentENV根据外壳程序的不同,外壳程序可能会使用该变量在运行另一个脚本之前执行(源)一个单独的文件。一般来说,使用小写变量名以避免意外使用重要的 shell 或环境变量。

相关内容