Назад | Перейти на главную страницу

Запуск команды или сценария в терминале из любого места, добавив его в PATH, что я делаю не так?

В 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. Я иногда вижу это для плохо разработанных сценариев, которые предполагают, что они вызываются с определенного пути.