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