Почему некоторые скрипты используют экспорт для системных переменных?

Я вижу много онлайн-руководств для ubuntu, а некоторые из них используют export = в начале скрипта для системных переменных.

например:

export JAVA_HOME=/usr/local/java/jdk1.8.0_05 export CATALINA_HOME=/ubuntuland/utils/apache-tomcat-8.0.8 

См. Этот учебник

Я пытаюсь понять логику – поскольку для меня имеет смысл использовать системные переменные и не определять их собственные.

РЕДАКТИРОВАТЬ

когда я пишу: echo $JAVA_HOME в оболочке я вижу правильный контент в любой оболочке в любое время сервера (даже после перезагрузки)

2 Solutions collect form web for “Почему некоторые скрипты используют экспорт для системных переменных?”

Иногда у вас есть зависимости версии, которые нужно использовать для запуска чего-либо. В вашем случае это будет версия Java для питания вашего сервера Tomcat. Глобальная версия Java может со временем меняться и привести к сбою вашего сервера Tomcat из-за ошибок или несовместимости. Поэтому, если вы определите свой собственный JAVA_HOME вы можете убедиться, что ваш Tomcat начинается с версии Java, которую вы ранее тестировали, и на нее можно положиться. Другим моментом может быть то, что у вас несколько запущенных экземпляров, и вам нужно указать другой CATALINA_HOME для разных экземпляров.

Я думаю, что даже лучше всего определять переменные явные, а не полагаться на переменные, которые могут меняться со временем или даже не существовать, в зависимости от конфигурации системы. Это также упрощает поиск и устранение неполадок и просмотр используемых путей и двоичных файлов.

В руководстве bash говорится об export :

 export [-fn] [name[=word]] ... export -p The supplied names are marked for automatic export to the envi‐ ronment of subsequently executed commands. [...] 

Это означает, что когда переменная экспортируется, она будет доступна для любого дочернего процесса оболочки, которая экспортировала его. Проиллюстрировать:

 $ foo="bar" $ bash -c 'echo "$foo"' ## the variable isn't available to the child $ export foo="bar" $ bash -c 'echo "$foo"' ## the child also gets the variable bar 

Таким образом, используйте export когда вы хотите сделать переменную доступной для всех процессов, а не только для текущей рабочей оболочки.

  • Bash - переменная Shell получает повышенную переменную окружения в процессе child bash
  • Экспортировать переменную env, которая будет доступна во всех суб-оболочках, и может быть изменена?
  • Как настроить среду для es?
  • Последняя неудачная команда в bash
  • Получить значение переменных среды в for-loop
  • Почему echo $ SHELL всегда показывает / bin / bash?
  • Можно ли изменить оболочку, используемую для запуска приложений GUI из диспетчера рабочего стола?
  • Как печатать переменные и значения оболочки для их копирования и вставки?
  • Есть ли вред в использовании переменных, которые не установлены?
  • получить переменную окружения по имени переменной?
  • В чем разница между env, setenv, export и когда использовать?
  • Interesting Posts

    incrontab по имени папки, содержащей линейные каналы

    Установка программ на съемном диске

    Подписание модуля для предварительно созданного ядра

    Почему grp: lctrl_lshift_toggle по-прежнему сохраняет правильные клавиши в качестве триггеров переключения?

    Как мне выполнить ls, а затем отсортировать результаты по дате?

    Невозможно grep список заданий, когда задания, вызванные функцией

    В чем разница между командами whatis и apropos?

    Как получить исходный MAC-адрес сетевой карты после изменения ОС?

    Ssh логин / shell не полностью работает (как раньше)

    Каковы последствия повторного использования значений BSSID?

    Как выбрать, какой удаленный экземпляр vifm будет запускать команду?

    Как я могу удаленно обращаться к серверам Linux

    фон tmux vim colorscheme не показывает

    удаление на месте строк журнала со старыми отметками времени

    Как сделать замену sed (s /// g) на основе списка? Мне нужно поменять несколько слов, с другими соответствующими словами

    Linux и Unix - лучшая ОС в мире.