对于 Laravel 开发,我们经常发现自己输入诸如 ./vendor/bin/pest
之类的命令来运行项目特定的命令。
我们不需要这样做!
为了帮助解决这个问题,我们可以更新我们的 Mac(或 Linux)$PATH
变量。
$PATH
?
什么是 $PATH
变量设置了系统在查找要运行的命令时要查找的目录。
例如,我们可以输入 which <cmd>
来查找任何给定命令的路径
$ which git/usr/local/bin/git
我的系统知道在 /usr/local/bin
中查找 git
,因为 /usr/local/bin
是我的 $PATH
中设置的一个目录!
您现在可以 echo
出您的路径
# Output the whole pathecho $PATH # For human-readability, split out each# directory into a new line:echo "$PATH" | tr ':' '\n'
PATH 中的相对目录
我们可以编辑我们的 $PATH
变量来添加我们想要的任何目录!
一个非常方便的技巧是在您的 $PATH
变量中设置相对目录。
两个例子是添加 ./vendor/bin
和 ./node_modules/.bin
# In your ~/.zshrc, ~/.bashrc or, ~/.bash_profile or similar# Each directory is separated by a colonPATH=./vendor/bin:./node_modules/.bin:$PATH
在这里,我们将两个新的路径预先添加到现有的 $PATH
变量中。现在,无论我们 cd
到哪个 Laravel 应用程序中,我们都可以运行 pest
并知道我们正在运行 ./vendor/bin/pest
,phpunit
来运行 ./vendor/bin/phpunit
(以及 ./node_modules/.bin
中任何给定的 Node 命令)。
我们还可以将当前目录 .
设置在我们的 $PATH
中(如果它还没有设置 - 它可能已经设置了)
# In your ~/.zshrc, ~/.bashrc or, ~/.bash_profile or similar# Each directory is separated by a colon# Here we also set the current directory in our PATHPATH=.:./vendor/bin:./node_modules/.bin:$PATH
这样我们就可以输入 artisan
而不是 ./artisan
或 php artisan
。
这些是我在 Chipper CI 中设置的,以便用户可以运行 pest
或 phpunit
,而无需担心命令在他们的 CI 环境中存在的位置。
说明
顺序在 $PATH
中也很重要。当搜索命令时,会首先搜索较早的目录。系统将使用找到的第一个命令 - 这意味着您可以通过将命令放在 $PATH
中更早的目录中来覆盖系统命令。这就是为什么我们预先将 ./vendor/bin
和 ./node_modules/.bin
添加到 $PATH
中,而不是追加它。
您可以找到命令的所有位置,如下所示
$ which -a git git is /usr/local/bin/gitgit is /usr/bin/gitgit is /usr/local/bin/gitgit is /usr/bin/git
最后,在所有这些情况下,命令应该具有可执行权限才能像这样工作。在创建自己的命令(例如自定义 bash 脚本)时,这一点需要注意。