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