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 ...以前です;

そうでない場合は、複合コマンドの終了状態に従って;実行が行われます。chownif

やや混乱した行の連続がない場合(修正された)コードは次のようになります。

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シェルによっては、シェルはこの変数を使用して別のスクリプトを実行する前に別々のファイルを実行(ソース)できます。通常、重要なシェルまたは環境変数を誤って使用したくない場合は、小文字の変数名を使用します。

関連情報