Що таке $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 ...
Щоб мати свій власний каталог бін, вам потрібно лише додати його до шляху. Зробіть це, відредагувавши ~ / .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] . Коротше кажучи, це змушує баш перечитати /etc/profile
і ~/.profile
. Просто запущене exec bash
буде перечитано лише ~/.bashrc
.