PHP 버전을 전환하는 스크립트

PHP 버전을 전환하는 스크립트

저는 스크립트 명령을 만드는 것이 처음이고 사용하려는 버전을 입력하는 PHP 버전을 전환하는 스크립트를 만들려고 합니다(예: 7.3).

현재 진행 상황은 다음과 같습니다.

#!/bin/bash
VERSION=${1?Error: no version given}

#this is so wrong
CURRENT_VERSION = php -v

a2dismod php+CURRENT_VERSION &&
a2enmod php+VERSION &&
service apache2 restart &&

update-alternatives --set php /usr/bin/php+VERSION &&
update-alternatives --set phar /usr/bin/php+VERSION &&
update-alternatives --set phar.phar /usr/bin/phar.phar+VERSION &&
echo "success"

명령을 변수와 연결하고 PHP 버전의 현재 버전 번호를 가져와 비활성화하는 방법을 아직 모르기 때문에 아직 스크립트를 실행하지 않았습니다.


고쳐 쓰다

편집된 스크립트:

#!/bin/bash
VERSION=${1?Error: no version given}
CURRENT_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')

a2dismod php"$CURRENT_VERSION" &&
a2enmod php"$VERSION" &&
service apache2 restart &&

update-alternatives --set php /usr/bin/php"$VERSION" &&
update-alternatives --set phar /usr/bin/php"$VERSION" &&
update-alternatives --set phar.phar /usr/bin/phar.phar"$VERSION" &&
echo "success"

스크립트를 실행하면 다음 오류가 발생합니다.

update-alternatives: using /usr/bin/php7.3 to provide /usr/bin/php (php) in manual mode

답변1

이미 언급했듯이로렌스댓글 섹션에서 스크립트를 수정해야 합니다.

현재 스크립트에는 CURRENT_VERSION = php -v몇 가지 문제가 있습니다.

  1. 변수 이름 뒤에는 공백이 없어야 합니다. 그렇지 않으면 쉘은 CURRENT_VERSION변수 선언이 아닌 명령으로 해석하기 때문에 실행을 시도합니다.

  2. $( ... )백틱을 사용하거나 사용하지 않고 명령을 묶어야 합니다 . 래핑되지 않은 경우 CURRENT_VERSION선언되지만 비어 있으면 명령이 실행되어 다음으로 출력됩니다.STDOUT

이어야 하며 CURRENT_VERSION=$(php -v)명령 출력을 에 저장합니다 . 그러나 다음이 생성되므로 CURRENT_VERSION몇 가지 조정이 필요합니다 .php -v

PHP x.x.xx (cli) (built: DATE) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v.y.y.yy, Copyright (c) 1998-2018 Zend Technologies

위의 모든 것이 아니라 버전 번호만 필요합니다. 그렇죠?


또한 변수 호출 앞에 달러 기호를 붙여야 합니다 $. 아마도 그럴 필요는 없을 것입니다.+

a2dismod php"$CURRENT_VERSION" &&
a2enmod php"$VERSION" &&
service apache2 restart &&

update-alternatives --set php /usr/bin/php"$VERSION" &&
sudo update-alternatives --set phar /usr/bin/php"$VERSION" &&
sudo update-alternatives --set phar.phar /usr/bin/phar.phar"$VERSION" 

관련 정보