在带有 Bash、MariaDB 和 PHP 8.1 的 CentOS 上,我使用 Drush。
Drush 是内容管理系统 Drupal 的命令行。
每次我运行 Drush 命令时,我都会这样写:
cd /home/www/example_1.com
vendor/bin/drush status
vendor/bin/drush cache:rebuild
或者
cd /home/www/example_2.com
vendor/bin/drush status
vendor/bin/drush cache:rebuild
我怎样才能PATH
不再需要vendor/bin
Drush 命令?
export PATH=$PATH:vendor/bin
这是要走的路吗?
答案1
一种解决方法(也许有更好的方法)是在$PATH
每次收到 shell 提示时进行更新,这可以通过使用PROMPT_COMMAND
环境变量(在bash
)中实现。
所以你可以定义一个这样的函数:
#You can modify this function to update the path
#only when the current directory is under '/home/www/website_folder'
checkPath() {
if [[ -z $OLDPATH ]]; then
OLDPATH="$PATH";
PATH="${PATH}:${PWD}/vendor/bin";
else
PATH="${OLDPATH}:${PWD}/vendor/bin"
fi
}
if 条件可防止每次运行命令时添加新路径。所以你将永远拥有你的原始$PATH
+工作目录在$PWD/vendor/bin
哪里$PWD
并在你的 shell 中设置:
PROMPT_COMMAND='checkPath'
每次收到 shell 提示时都使用上面的代码(当命令完成执行时,PROMPT_COMMAND
将执行内容(在本例中为 checkPath 函数))。
所以如果你输入:
cd /home/www/example_1.com
将会$PATH
有:
/home/www/example_1.com/vendor/bin
当你改为example_2.com
这样时:
cd /home/www/example_2.com
#or
cd ../example_2.com
将会$PATH
有:
/home/www/example_2.com/vendor/bin
坏处
使用此解决方法可能很有用,但如果更改为诸如 之类的目录,/home/www
将$PATH
具有以下值:
/home/www/vendor/bin
正如您所看到的,$PATH 可能有一个不存在的目录,但据我所知这不会对您的 shell 产生问题,请记住 PATH 每次都会更改(当您光盘到另一个目录)。如果/home/www/vendor/bin
存在,则该目录下的文件将被该PATH
变量识别。
另外,如果您已drush
在系统中全局安装(例如在)中,则提供的/usr/bin
命令将不起作用。drush
/home/www/example_?.com/vendor/bin/
解决这个问题的方法是在前面添加${PWD}/vendor/bin
而$PATH
不是附加它:
checkPath() {
if [[ -z $OLDPATH ]]; then
OLDPATH="$PATH";
PATH="${PWD}/vendor/bin:${PATH}";
else
PATH="${PWD}/vendor/bin:${OLDPATH}"
fi
}