Хтось може пояснити, що означає ця команда?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Хтось може пояснити, що означає ця команда?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Відповіді:
${GZIP_BINDIR-'/bin'}є bashсхемою розширення параметрів. Від man bash:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Безпосередньо перед цією частиною чоловічої сторінки є (спасибі @jwodder за повідомлення):
Omitting the colon results in a test only for a parameter that is unset.
Як йдеться на сторінці сторінки, вона встановить значення змінної за замовчуванням GZIP_BINDIR. Якщо GZIP_BINDIRраніше було встановлено значення (відмінне від null, яке ви не використовуєте :), то це значення буде використано, інакше /binбуде використано як значення змінної GZIP_BINDIR.
З іншого боку, якщо ви також хочете перевірити нульові значення, скористайтеся цією схемою (включіть :):
${GZIP_BINDIR:-'/bin'}
Після цього $PATHзаповіт буде розширено до значень, які він дотримувався раніше. Отже, якщо PATHраніше:
/usr/sbin:/usr/bin
Тепер ваша PATHбуде (враховуючи GZIP_BINDIR, що не встановлено):
/bin:/usr/sbin:/usr/bin
export PATHзробить це PATHдоступним для всіх дочірніх процесів.
:-вказується: "Не виконуючи розширення підрядків, використовуючи форми, задокументовані нижче (наприклад, :-), bash тести для параметра, який не встановлений або недійсний. Опущення двокрапки приводить до тесту лише для параметра, який не встановлений ".
PATHта exportв одну команду таким чином:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Чи дійсно немає двокрапки перед дефісом всередині параметра розширення ${GZIP_BINDIR-'/bin'}?
Цей вид конструкції майже завжди записується двокрапкою, оскільки в ${GZIP_BINDIR:-'/bin'}цьому значенні "якщо $ GZIP_BINDIR NULL або не встановлено, встановіть його на" / bin ""
Однак наданий вами синтаксис є дійсним, але рідкісним. ${GZIP_BINDIR-'/bin'}(без двокрапки) означає, "якщо $ GZIP_BINDIR не встановлено, встановіть його на" / bin "". Якщо воно встановлено (було оголошено), але нічого йому не призначено (наприклад, це NULL), нічого не буде вставлено.
Тут може виникнути помилка, хоча двокрапка, що слідує за конструкцією змінної (...} :$ PATH ...) , все одно буде вставлена, якщо встановлено $ GZIP_BINDIR, але NULL. Оскільки це додасть двокрапку на початку $ PATH, це призведе до того, що спочатку буде шуканий поточний каталог.
Це більшість вважає проблемою безпеки, оскільки полегшує запуск зловмисної програми з тим самим іменем, що і стандартні команди, просто помістивши її в поточний каталог.
Щоб залишити $ PATH без змін, якщо встановлено $ GZIP_BINDIR, але NULL (порожній), правильним синтаксисом було б ${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Щоб залишити $ PATH без змін, якщо $ GZIP_BINDIR або знято, або встановлено, але NULL, правильним буде синтаксис ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
Ця команда оновить змінну PATH.
Це PATHзмінна середовище, що вказує набір каталогів, де розташовані виконувані програми.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
Це додає значення іншої змінної, GZIP_BINDIRякщо для виходу з попереднього PATH інше використовувати / bin замість цього і додати його до PATH
export PATH
Експорт використовується для встановлення PATH, доступного для всіх дочірніх процесів та підрозділів. Прочитайте це для отримання додаткової інформації про
Ви повинні зауважити, що це не статично, і ви втратите його, як тільки вийдете з оболонки.
Для того, щоб ця редакція PATH була постійною, ви повинні додати ці рядки до своїх .bashrc
gedit .bashrc
і додайте рядок
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
потім запустіть команду
source .bashrc
:в${GZIP_BINDIR-'/bin'}" Не обов'язково.${parameter-word}також є дійсним, хоча, схоже, немає на сторінці людини.