В osx / linux я хочу иметь возможность запускать команду / скрипт на терминале из любого места, которое связано с программой.
т.е. я хочу иметь возможность запускать:
сплав
что работает:
/usr/local/share/npm/lib/node_modules/alloy/bin/alloy
Я предполагаю, что добавление в .bashrc - лучший способ? Я пробовал запустить:
export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"
а также:
export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin/alloy"
Затем я запустил новое окно терминала, но команда сплава не работает. Я что-то упускаю?
Лучшее место для добавления в PATH - это не файл ~ / .bashrc, а ~ / .bash_profile, если он существует. Если .bash_profile не существует, лучшее место - ~ / .profile. Часть ~ автоматически расширяется до вашего домашнего каталога (/home/you
).
Когда вы входите в систему и выполняете bash в качестве «оболочки входа», он читает .bash_profile. Если он не найден, он читает .profile. В .bashrc НЕ читается в этом случае (если он явно не вызывается изнутри .bash_profile). Я редко что-нибудь добавляю в .bashrc; одна вещь, которая предположительно должна быть там, - это псевдонимы, если вы хотите их использовать.
Чтобы оставаться совместимым с некоторыми старыми оболочками входа в систему (например, ksh88), которые также читают .profile, вы также можете использовать там отдельную строку экспорта:
PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"
export PATH
Ваш синтаксис верен для .bash_profile:
export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"
Вы можете протестировать его немедленно, просто введите одно из приведенных выше значений в фактическую командную строку bash, а затем попробуйте проверить, распознается ли он:
echo "$PATH"
which alloy
alloy
Теперь, в качестве проверки вашего .bash_profile или .profile, войдите в систему в новом сеансе (не открывайте просто другое окно терминала, а действительно используйте свой логин и пароль).
Чтобы включить один и тот же параметр для всех пользователей системы, измените / etc / profile или /etc/profile.d, в зависимости от вашего вкуса Linux. Это общесистемный профиль, который читается при каждом входе в систему перед ~ / .bash_profile или ~ / .profile.
Одно из простых решений, которое не требует манипулирования путем, - это просто создать символическую ссылку на приложение в /usr/local/bin
или /usr/local/sbin
папки, так как эти папки уже находятся на вашем пути. Я часто использую это для программ, которые устанавливаются в /opt
, /usr/local
или другие места, которые по умолчанию не попадают в путь.
ln -s /usr/local/share/npm/lib/node_modules/alloy/bin/alloy /usr/local/bin/alloy
Конечно, это может не всегда работать, если программа требует, чтобы она запускалась из определенного рабочего каталога, если у программы есть такое требование, она также не будет работать, если вы измените PATH. Я иногда вижу это для плохо разработанных сценариев, которые предполагают, что они вызываются с определенного пути.