Яка мета ПАТ?
Це те, як ваша оболонка знаходить програми. 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коли хочете, щоб підпрограми бачили значення, встановлені в оболонці, і не використовуєте їх, коли ви не хочете, щоб це сталося.
Як правило, я не експортую тимчасові змінні в сценарії оболонки, тому що я не хочу, щоб вони змінювали спосіб поведінки програм із цього сценарію оболонки.
Я не збираюся відповідати на жодне з ваших інших питань. Ви повинні задавати лише одне запитання. Я відповів на це лише багатьом, бо вони туманно пов'язані. Все інше належить до окремого питання.