Що таке "$ PATH" та "~ / bin"? Як я можу мати особисті сценарії?


29

Що таке $PATH?

Як я можу мати команди / програми, які доступні лише мені?
Я вже бачив цей шлях, про який ~/binзгадували раніше, але для чого він використовується, і як його використовувати?


Я дещо експериментую, тому що це більше FAQ або вікі-матеріал, ніж "справжнє запитання". Це було запропоновано, тому що я згадував ~ / bin у попередній відповіді (на пов'язаній бічній панелі праворуч), і хтось коментував, як додати його до PATH: тепер замість коротких коментарів ми можемо посилатись на цю публікацію, коли ~ / bin є згаданий.

Відповіді:


26

$ 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  ...

3
Одне, на що слід звертати увагу при використанні, - це те, що він знайде лише команди, які є бінарними файлами у файловій системі, він не повідомляє про вбудовані оболонки, псевдоніми та функції. Часто корисніше використовувати, typeщоб побачити, як фактична команда буде вирішена оболонкою; наприклад: which echoі type echoбуде повідомляти про різні речі, whichповертає '/ bin / echo', але 'type' повертає, що це вбудована оболонка, яку оболонка віддасть перевагу над файлом у '/ bin'.
Стів Бітті

@Steve Beattie, +1. whichкраще замінюється на інтерактивні оболонки typeабо commandв інтерактивних оболонках, і це абсолютно марно в сценаріях.
geirha

Варто зазначити, що я щойно помітив - $HOMEзмінна в $PATHчомусь не працює, тобто треба використовувати ~знак замість цього.
Привіт-Ангел

19

Щодо ~/binкоманд / програм, доступних лише вашому користувачеві

Останні версії Ubuntu містять ~/binкаталог у вашому $PATH, але лише якщо ~/binкаталог існує.

Якщо його не існує:

  1. Переконайтеся, що у вашій країні ~/.profileміститься наступна строфа (за замовчуванням ~/.profileвже є):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. Створіть ~/binкаталог:

    mkdir -p ~/bin
    
  3. Або перезавантажте комп'ютер, або змушуйте bash перечитати ~/.profile:

    exec -l bash
    

Дякуємо за exec -l bashпораду "перезавантажити чи ". Що робить -lпрапор? Я не знаходжу пояснення в man exec.
evanrmurphy

3
exec -lвиконає bash як оболонку входу [ wiki.bash-hackers.org/commands/builtin/exec] . Коротше кажучи, це змушує баш перечитати /etc/profileі ~/.profile. Просто запущене exec bashбуде перечитано лише ~/.bashrc.
Данило П'яццалунга
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.