Как добавить папку в PATH
PATH — список папок через двоеточие, в которых оболочка ищет команды. Папку в него добавляет строка export PATH=…, а куда её вписать, зависит от того, где папка должна действовать.
Как добавить
Случай зависит от того, где нужна папка: только в открытом окне терминала, всегда для вас или для всех пользователей.
Только в этом терминале
export PATH="$HOME/bin:$PATH"Настройка действует до закрытия окна.
Навсегда для себячерез ~/.bashrc
Допишите ту же строку в конец ~/.bashrc и примените:
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcОдинарные кавычки в echo нужны, чтобы в файл попал сам текст $HOME и $PATH, а не их нынешние значения. В новых окнах терминала настройка действует сама.
Для всех пользователейчерез /etc/profile.d
Создайте файл в папке /etc/profile.d/:
sudo nano /etc/profile.d/myapp.shС одной строкой:
export PATH="$PATH:/opt/myapp/bin"Файлы из /etc/profile.d/ читаются при входе в систему, поэтому изменение заработает после нового входа (выйдите и войдите снова или переподключитесь по SSH).
Во всех трёх случаях $PATH в строке сохраняет весь прежний список, а новая папка встаёт перед ним или после него — чем это различается, сказано ниже.
Проверить
echo $PATH
which myscript.shВ первом выводе должна появиться ваша папка, второй покажет полный путь к программе, если оболочка её находит (вместо myscript.sh — имя вашей программы из этой папки).
Папка в начале или в конце
export PATH="$HOME/bin:$PATH"— ваша папка проверяется первой: программа с тем же именем, что и системная, запустится из вашей папки.export PATH="$PATH:$HOME/bin"— ваша папка последней: системные программы важнее.
Для своих скриптов обычно всё равно; если не уверены — ставьте в конец.
Подводные камни
Не забывайте $PATH. Строка export PATH="$HOME/bin" заменит весь список одной папкой: перестанут находиться ls, nano и другие команды. Если это случилось, верните стандартный список на время и исправьте файл: export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin, затем nano ~/.bashrc.
sudoне видит программу. Уsudoсвой список папок, вашPATHон не берёт. Запускайте по полному пути:sudo /opt/myapp/bin/myapp.- Не работает по SSH или в cron. По SSH bash при входе читает
~/.profile(в Ubuntu, Debian и Mint он сам подключает~/.bashrc, но не всегда — если есть~/.bash_profile, читается он). У cron свой короткийPATH: в расписании пишите полные пути. - Тильда в кавычках. В
"~/bin:$PATH"знак~не заменится на домашнюю папку. Пишите$HOME— как в примерах. /etc/environmentтоже задаётPATHдля всех, но это не скрипт: там нельзя писатьexportи подставлять$PATH— только полный список папок целиком.