Ubuntu - 始终对特定目录使用特定的 php 版本

Ubuntu - 始终对特定目录使用特定的 php 版本

我有多个 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 中使用,例如shbash

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 被替换phpphp8.1可执行,这要归功于exec.

相关内容