Что такое $PATH
?
Как я могу иметь команды / программы, которые доступны только для меня?
Я видел этот путь, ~/bin
упомянутый ранее, но для чего он используется и как его использовать?
Что такое $PATH
?
Как я могу иметь команды / программы, которые доступны только для меня?
Я видел этот путь, ~/bin
упомянутый ранее, но для чего он используется и как его использовать?
Ответы:
$ PATH - это переменная окружения, используемая для поиска команд. ~ Ваш домашний каталог, поэтому ~ / bin будет / home / user / bin; это нормальный каталог.
Например, когда вы запускаете «ls» в оболочке, вы фактически запускаете программу / bin / ls; точное местоположение может отличаться в зависимости от конфигурации вашей системы. Это происходит потому, что / bin находится в вашем $ PATH.
Чтобы увидеть путь и найти, где находится какая-либо конкретная команда:
$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls # searches $PATH for an executable named "ls"
/bin/ls
$ ls # runs /bin/ls
bin desktop documents downloads examples.desktop music pictures ...
$ /bin/ls # can also run directly
bin desktop documents downloads examples.desktop music pictures ...
Чтобы иметь свой собственный каталог bin, вам нужно всего лишь добавить его в путь. Сделайте это, отредактировав ~ / .profile (скрытый файл), чтобы включить строки ниже. Если строки закомментированы, вам нужно только раскомментировать их; если они уже есть, у вас все готово!
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
Теперь вам нужно создать каталог ~ / bin, и, поскольку .profile запускается при входе в систему и добавляет ~ / bin только в том случае, если он существует в то время, вам нужно снова войти в систему, чтобы увидеть обновленный PATH.
Давайте проверим это:
$ ln -s $(which ls) ~/bin/my-ls # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls # lookup through $PATH
bin desktop documents downloads examples.desktop music pictures ...
$ ~/bin/my-ls # doesn't use $PATH to lookup
bin desktop documents downloads examples.desktop music pictures ...
type
чтобы увидеть, как фактическая команда будет решена оболочкой; Например: which echo
и type echo
сообщит о разных вещах, which
возвращает «/ bin / echo», но «type» возвращает, что это встроенная оболочка, которую оболочка предпочтет над файлом в «/ bin».
which
лучше заменить на type
или command
в интерактивных оболочках, и это абсолютно бесполезно в сценариях.
$HOME
переменная в $PATH
какой-то причине не работает, то есть ~
вместо нее нужно использовать знак.
Относительно ~/bin
и команды / программы доступны только для вашего пользователя
Последние версии Ubuntu включают в себя ~/bin
каталог $PATH
, но только если ~/bin
каталог существует.
Если он не существует:
Убедитесь, что ваш ~/.profile
раздел содержит следующую строфу (по умолчанию ~/.profile
уже есть):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Создайте ~/bin
каталог:
mkdir -p ~/bin
Перезагрузите компьютер или принудительно перечитайте bash ~/.profile
:
exec -l bash
exec -l bash
подсказку «перезагрузка или ». Что делает -l
флаг? Я не нахожу объяснения в man exec
.
exec -l
выполнит bash в качестве оболочки для входа [ wiki.bash-hackers.org/commands/builtin/exec] . Короче говоря, это заставит Bash перечитать /etc/profile
и ~/.profile
. Просто работает exec bash
будет только перечитать ~/.bashrc
.