我有多个 PHP(8.1 和 7.3)。如果我执行的php -v
话我会得到 7.3。
我需要使用 PHP 为 magento 2 执行一些命令,例如php bin/magento cache:flush
,但我需要使用 php 8.1 为某个文件夹调用它(/var/www/公司)但我不想总是必须指定我的 php 8 二进制文件,例如php8.1 bin/magento cache:flush
才能使其工作。
如果我位于该特定目录中,有没有办法让它始终使用 PHP 8.1?
答案1
这是一个快速而肮脏的包装函数,您可以在 shell 中使用,例如sh
或bash
:
php () (
case "$PWD/" in
/var/www/company/ ) c=php8.1 ;;
* ) c=php ;;
esac
exec "$c" "$@"
)
现在足以运行php whatever …
,并且将相应地选择一个或另一个可执行文件。您可以通过php -v
在其他地方尝试来确认这一点/var/www/company
。
笔记:
- 您可能想要
/var/www/company/*
代替/var/www/company/
. $PWD
保存pwd -L
要打印的内容(参见开头这个答案)。您可能想要pwd -P
打印什么;如果是这种情况,请使用case "$(pwd -P)/" in
.- 整个函数在子 shell 中运行,因此
c
是“本地”的,没有任何不可移植的local c
.最终,子 shell 被替换php
或php8.1
可执行,这要归功于exec
.