切换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. 变量名后面不应有空格,否则 shell 会尝试执行,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" 

相关内容