При разработке на Laravel мы часто сталкиваемся с тем, что вводим команды типа ./vendor/bin/pest для запуска команд, специфичных для проекта. Но мы можем обновить переменную $PATH вашего Mac (или Linux).
Что такое $PATH?
Переменная $PATH задает каталоги, которые ваша система ищет при поиске команд для запуска.
Например, мы можем ввести which <cmd>, чтобы найти путь к любой заданной команде:
$ which git
/usr/local/bin/git
Моя система знала, что нужно найти git в /usr/local/bin, потому что /usr/local/bin — это один каталог, установленный в моем $PATH!
Вы можете вывести с помощью echo свой путь:
# Выведите весь путь целиком
echo $PATH
# Для удобства чтения человеком разделите каждый каталог в новую строку
echo "$PATH" | tr ':' '\n'
Относительные каталоги в PATH
Мы можем отредактировать нашу переменную $PATH, чтобы добавить в любые каталоги!
Один из удобных трюков — установить относительные каталоги в переменной $PATH.
Два примера ./vendor/bin и ./node_modules/.bin:
# В вашем ~/.zshrc, ~/.bashrc или, ~/.bash_profile или подобном
# Каждый каталог разделен двоеточием
PATH=./vendor/bin:./node_modules/.bin:$PATH
Здесь мы добавили два наших новых пути к существующей переменной $PATH. Теперь, независимо от того, к какому приложению Laravel мы подключены, мы можем запустить pest и знать, что мы запускаем ./vendor/bin/pest, phpunit для запуска ./vendor/bin/phpunit (и то же самое для любой заданной команды узла в ./node_modules/.bin).
Мы также можем установить текущий каталог "." в нашем $PATH.
# В вашем ~/.zshrc, ~/.bashrc или, ~/.bash_profile или подобном
# Каждый каталог разделен двоеточием
# Здесь мы также указываем текущий каталог в нашем PATH
PATH=.:./vendor/bin:./node_modules/.bin:$PATH
Таким образом, мы можем ввести artisan вместо ./artisan или php artisan.
Примечания
Порядок также имеет значение в $PATH. Когда выполняется поиск команды, сначала выполняется поиск в более ранних каталогах. Система будет использовать первую найденную команду — это означает, что вы можете переопределить системную команду, поместив ее в каталог ранее в $PATH. Вот почему мы добавляем ./vendor/bin и ./node_modules/.bin в $PATH.
Вы можете найти все места команды, подобные этому:
$ which -a git
git is /usr/local/bin/git
git is /usr/bin/git
git is /usr/local/bin/git
git is /usr/bin/git
Наконец, во всех случаях команды должны иметь исполняемые разрешения для такой работы. Это то, что нужно иметь в виду при создании собственных команд, таких как пользовательский скрипт bash.