Використання експорту в .bashrc


45

Я помітив у своїх, .bashrcщо exportперед ними є рядки , наприклад,

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"

тоді як інші - ні

HISTSIZE=100000

Мені цікаво, чи, по-перше, це правильно, а по-друге, яке правило для використання exportв .bashrc.

Відповіді:


53

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

Про це говорить сторінка man:

The  supplied  names are marked for automatic export to the environ‐
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =word,
the  value  of  the variable is set to word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid shell variable name, or -f is supplied with a
name that is not a function.

Це можна продемонструвати за допомогою наступного:

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh

$ export MYVAR="value-exported"
$ ./echo.sh
value-exported

Пояснення:

  • Я спершу встановив ${MYVAR}змінну Shell за допомогою MYVAR="value". Використовуючи echoя, я можу повторити його значення, оскільки ехо є частиною оболонки.
  • Тоді я створюю echo.sh. Це маленький сценарій, який в основному робить те саме, він просто перегукується ${MYVAR}, але різниця полягає в тому, що він буде працювати в іншому процесі, оскільки це окремий сценарій.
  • При виклику echo.shнічого не видає, тому що новий процес не успадковується${MYVAR}
  • Потім я експортую ${MYVAR}в своє середовище exportключове слово
  • Коли я echo.shзнову запускаю те саме , це повторюється за змістом, ${MYVAR}оскільки він отримує його з оточення

Отже, щоб відповісти на ваше запитання:

Залежить, де буде використана змінна, чи потрібно її експортувати чи ні.


17

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

  • HOME- вказує домашній каталог користувача, де розташовані файли конфігурації для кожного користувача. Використовується будь-якою програмою, яка читає файли конфігурації для користувача або іншим чином має знати місце розташування домашнього каталогу користувача.
  • PATH- вказує, де знайти виконувані файли для запуску інших програм. Використовується кожною програмою, якій потрібно запустити іншу програму.
  • LD_LIBRARY_PATH- вказує, де знайти динамічні бібліотечні файли. Використовується кожним динамічно пов'язаним виконуваним файлом.
  • EDITOR, VISUAL- вказує, яку програму потрібно запустити, коли потрібен редактор. Використовується будь-якою програмою, якій потрібно запустити текстовий редактор.
  • DISPLAY, XAUTHORITY- вказує, як підключитися до сервера X11. Використовується клієнтами X11 (тобто програмами GUI).
  • LESS- параметри автоматично включаються при lessзапуску. Використовується less.
  • http_proxy- вказує веб-проксі для використання. Використовується більшістю веб-браузерів.

Не використовуйте exportдля змінних оболонок. Змінні оболонки є особливістю оболонки як мови програмування. Змінні оболонки використовуються лише всередині оболонки, де вони встановлені; вони не мають значення для програм, запущених оболонкою. Змінні оболонки дублюються, коли створюється підшалл, як і решта стану оболонки. Ось кілька прикладів змінних оболонок, які мають значення для популярних оболонок:

  • PS1 - підказка для відображення перед кожною командою.
  • IFS - символи, які відокремлюють слова в нецитованих розширеннях змінних та підстановках команд.
  • HISTFILE - файл, де оболонка запише історію команд.

Крім змінних, які використовуються оболонкою, більшість скриптів оболонок використовують змінні для своїх внутрішніх цілей.

Більшість змінних оточуючих середовищ (наприклад PATH) мають сенс для цілого сеансу, і їх слід встановити у ~/.profileподібний файл. Змінні, які мають сенс лише для конкретної оболонки (наприклад PS1), повинні бути встановлені у специфічному для оболонки файлі, такому як ~/.bashrcабо ~/.zshrc. Див. Чи є еквівалентний файл ".bashrc", який читають усі оболонки?


3

Для внутрішніх змінних bash вам не потрібно export. З вашого прикладу HISTTIMEFORMATвикористовується bash сам і йому не потрібен експорт MYSQL_HISTFILEє для, mysqlі той, що потребує експорту, інакше mysqlне бачить.

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