Как установить переменную среды для sudo в MacOS?

Я установил ServiceMix на свою машину и пытаюсь запустить его. Сценарий запуска называется start.sh. Когда я это сделал ./start.sh , он дал мне сообщение о разрешении на отказ. Поэтому я использовал sudo ./start.sh , который запускает сервер отлично.

Однако, похоже, я использую Java 7, когда я хотел бы использовать Java 6 (по разным причинам). Я просмотрел скрипт start.sh и обнаружил, что он использует переменную JAVA_HOME . Поэтому я установил JAVA_HOME в каталог JDK 6.

Однако ServiceMix по-прежнему использует Java 7.

Поиск Google показал, что при выполнении команды с помощью sudo sudo удаляет определенные переменные среды. Поэтому я сделал sudo -E ./start.sh . Опять же, он использовал JDK 7.

Я открыл start.sh и добавил строку, echo $JAVA_HOME чтобы узнать, установлена ​​ли переменная правильно или нет. Выход echo был пустой.

Я попытался изменить файл / etc / sudoers, чтобы включить Defaults env_keep += "JAVA_HOME" . Выполнение start.sh теперь говорит мне, что мой оператор echo снова является пустой строкой. ServiceMix по-прежнему использует JDK 7.

Я попытался установить JAVA_HOME в /etc/profile . Выполнение start.sh теперь говорит мне, что мой оператор echo снова является пустой строкой. Опять же, ServiceMix использует JDK 7.

Какую ошибку я здесь делаю?

FWIW, я на Mac OS X 10.8.2. echo $SHELL на моем терминале возвращает / bin / bash. Когда я использую sudo su и fire echo $SHELL , он возвращает / bin / sh.

2 Solutions collect form web for “Как установить переменную среды для sudo в MacOS?”

Я предлагаю вам попробовать следующие шаги:

  1. Внутри каталога /etc/profile.d создайте файл с именем set_java_path.sh файл, содержащий строку

    export JAVA_HOME=<_complete_path_to_java6_directory_>

  2. Запустите команду bash один раз, чтобы загрузить указанное изменение. И запустите скрипт start.sh .

Редактировать:

Если каталог /etc/profile.d не существует, создайте имена каталогов одинаково (разрешение: 0755 & owner и group as root), а внутри файла /etc/profile добавьте следующий код:

 if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi 

Чтобы сохранить переменные среды в качестве sudoer, добавьте значения по Defaults env_keep += PATH в файл sudoer ( sudo visudo ).

  • $ @ и 'set env $ PATH' - зачем это утверждение входит в .inputrc?
  • Почему моя среда полна ␀s?
  • Как отправить значение переменной в трубу, скрывая ее из списка процессов?
  • Набор переменных среды, но не соблюдается
  • Как запустить cronjob в моей обычной среде?
  • Совместное использование переменных в сценариях подшивки
  • «Протокол не указан» при запуске vim с sudo
  • Makefile включает файл env
  • как предотвратить распознавание / доступ к экспортируемой переменной среды дочерней оболочкой (bash)?
  • Легкий способ восстановления вашей ПАНЕЛИ
  • Как передать переменные среды в новый сеанс входа в ssh?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.