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또한 내 변경 사항을 확인하세요 $environment. ENV셸에 따라 셸은 이 변수를 사용하여 다른 스크립트를 실행하기 전에 별도의 파일을 실행(소스)할 수 있습니다. 일반적으로 중요한 쉘 또는 환경 변수를 실수로 사용하지 않으려면 소문자 변수 이름을 사용하십시오.

관련 정보