Що таке PATH на Mac OS?


12

Що таке PATHMac OS? Я використовував його для встановлення глобальних інструментів командного рядка, але єдина документація, яку я знайшла, - це підручники для того, щоб робити саме це, без реального пояснення того, що відбувається під кришкою. Я також не знайшов відповідної сторінки у Вікіпедії .

Отже, яка мета PATHі в чому різниця між ** /etc/pathsта ~/.bash_profile?

Наприклад, у своєму pathsфайлі я бачу таке:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

Але в моєму ~/.bash_profileя бачу це:

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

Це лише додаток до pathsфайлу, призначене для користувача? Що це за речі paths, як /usr/bin?


2
Не поєднуйте кілька запитань в одній публікації. Кожне ваше запитання буде ласкаво просимо сюди окремо, але не всі разом, як це. Будь ласка, підведіть це до одного питання, ви можете поєднати 1 і 2, але інші не мають нічого спільного з PATH. 3 відповіді тут, 4 пояснено тут, і 5 не має великого сенсу, я боюся. Також не виникає питання про ваш бонус, які файли є двійковими? Сценарії - ні.
тердон

Я відредагував своє запитання. Крім того, я знайшов ці посилання корисними. Дякую.
gwg

Відповіді:


15

1. Яка мета ПАТ?

PATHце змінна середовище, яка містить розділений двокрапкою список каталогів, де ваша оболонка буде шукати виконувані файли, які ви назвали в командному рядку, не надаючи до них явного шляху (як у вашому jsdocприкладі). Таким чином, якщо у вас PATHє

/usr/bin:/bin:/home/bin

то будь-який виконуваний файл, який ви зателефонували по імені, буде шукати в цих каталогах (у такому порядку), і перший знайдений виконуваний файл - той, який виконується.

2. Яка різниця між / etc / paths і ~ / .bash_profile

Відповідно до цього питання на ServerFault , /etc/pathsвикористовується для встановлення PATHглобально (тобто загальносистемного для всіх користувачів), тоді ~/.bash_profileяк використовується для встановлення переваг для користувачів (де ~буде домашня директорія користувача). Те , що написано в .bash_profileбанку або додати в глобальний PATHвід /etc/pathsабо скасувати його повністю.

Для запису, /etc/pathsсхоже, особливість ОС MAC: я принаймні не натрапив на неї в GNU / Linux.


Я щойно відредагував їх, але дякую, що відповів на них!
gwg

@ggundersen Я підкреслив свою відповідь, щоб відповідати вашому відредагованому питанню.
Йосиф Р.

@ggundersen ви також можете прочитати мою відповідь та посилання на них /etc/pathsна OSX.
terdon

7

Яка мета ПАТ?

Це те, як ваша оболонка знаходить програми. lsНаприклад, коли ви вводите , що запускає програму з назвою, lsяка працює в /binбільшості систем, включаючи Mac OS X. Ваша оболонка може знайти це лише тому, що /binзнаходиться в PATH.

Оболонка шукає програми в PATHпорядку, зліва направо. Якщо lsу вашій системі є дві програми, і їхні каталоги є обома у вашій PATH, вона знайде ту, що знаходиться в каталозі, вказаному першим у вашій PATH.

Яка різниця між / etc / paths і ~ / .bash_profile

Вказані шляхи /etc/pathsдодаються до PATHзапуску у всіх оболонках Mac OS X.

~/.bash_profile- це лише один із декількох скриптів оболонки, якими керує Bash при запуску, і декілька з них стосуються Bash. Отже, якщо ви змінили свою оболонку - Mac OS X також надсилається, tcshі zsh, наприклад, - зміни, внесені /etc/bashrcне до вашої нової оболонки.

Також /etc/pathsє конфігураційним файлом на системному рівні, в той час ~/.bash_profileяк на кожного користувача. Якщо у вас на комп’ютері було налаштовано кілька інтерактивних користувачів, ви не хочете додавати каталоги, /etc/pathsякі не хотіли відображатись у всіх PATH. Те саме стосується, за /etc/bashrcвинятком, звичайно, що стосується лише користувачів, які використовують Bash в якості оболонки.

Яка різниця між PATH та $ PATH та $ {PATH}?

Зазвичай ви бачите змінну без sigil лише під час встановлення змінної. FOO=barвстановлює FOOзмінну середовища в рядок bar. Якщо ви вводите set, оболонка показує всі змінні середовища, і в цьому випадку ви також бачите змінну без будь-якого sigil.

$PATHі ${PATH}зазвичай взаємозамінні. Вони кажуть оболонці розширити значення поточної PATHзмінної на місці. Різниця стосується того, як і де ти їх використовуєш. Наприклад:

$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx

$ echo ${FOO}x
barx

У другій echoкоманді оболонка нічого не друкує, оскільки вона просить оболонку надрукувати змінну під назвою FOOx, яка не існує; оболонка розглядає неіснуючі змінні як порожні. Оскільки третій echoвикористовує фігурний синтаксис дужки, він дозволяє оболонці бачити, що ви вимагаєте FOOзмінної, і що xце просто інший символ, який ви хочете надрукувати відразу після цього.

Є ще один спосіб отримати той же ефект без фігурних брекетів, до речі:

$ echo "$FOO"x
barx

Змінні середовища розширюються подвійними лапками, а лапки відокремлюють розширення xвід змінної, щоб оболонка робила правильно.

Я тут використовую FOOзмінну середовища просто для наочності. Все, що я написав вище, так само добре застосовується PATH, оскільки це лише інша змінна середовище. Прикладних текстів буде просто набагато довше.

Що означає експорт PATH? Коли ми експортуємо?

Беручи наведений вище FOOприклад, якщо ви запустили іншу програму, вона не побачила б FOOзмінну, оскільки вона не експортується. Він живе лише в одному екземплярі оболонки:

$ echo $FOO
bar
$ bash
$ echo $FOO

$ exit
$ export FOO
$ bash
$ echo $FOO
bar

Коли я вперше запускаю нову bashоболонку під тією, яку я вже використовував, а потім намагаюся показати значення FOO, я отримую бланк, оскільки FOOне експортувався для підпрограми. Потім я вийшов з другої bashінстанції, експортував її, побіг bashзнову, і тепер друга інстанція бачить значення FOO.

Ви використовуєте, exportколи хочете, щоб підпрограми бачили значення, встановлені в оболонці, і не використовуєте їх, коли ви не хочете, щоб це сталося.

Як правило, я не експортую тимчасові змінні в сценарії оболонки, тому що я не хочу, щоб вони змінювали спосіб поведінки програм із цього сценарію оболонки.

Я не збираюся відповідати на жодне з ваших інших питань. Ви повинні задавати лише одне запитання. Я відповів на це лише багатьом, бо вони туманно пов'язані. Все інше належить до окремого питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.