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" 

おすすめ記事