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

Я вижу много онлайн-руководств для 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 выполняются при запуске терминала?
  • Почему изменение $ PATH влияет на дочерние оболочки, но с изменением $ foo нет?
  • Как определить, откуда появилась переменная среды
  • Использовать env с переменными окружения из файла
  • Экспортировать переменную env, которая будет доступна во всех суб-оболочках, и может быть изменена?
  • Что такое переменная среды?
  • Msgstr "недействительный идентификатор", когда я делаю "экспорт $ PATH"
  • Можно ли изменить оболочку, используемую для запуска приложений GUI из диспетчера рабочего стола?
  • Как настроить среду для es?
  • В чем разница между env, setenv, export и когда использовать?
  • Что делает `env COLUMNS =% S ps ...` do?
  • Linux и Unix - лучшая ОС в мире.