저는 스크립트 명령을 만드는 것이 처음이고 사용하려는 버전을 입력하는 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
몇 가지 문제가 있습니다.
변수 이름 뒤에는 공백이 없어야 합니다. 그렇지 않으면 쉘은
CURRENT_VERSION
변수 선언이 아닌 명령으로 해석하기 때문에 실행을 시도합니다.$( ... )
백틱을 사용하거나 사용하지 않고 명령을 묶어야 합니다 . 래핑되지 않은 경우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"