Может ли скрипт изменить переменную окружения своей вызывающей оболочки?

Я устанавливаю свой JAVA_HOME в моем ~/.bashrc файл.

Теперь мне нужно создать скрипт, который изменит JAVA_HOME только для текущего терминала, чтобы я мог запустить приложение, которое требует Java 5.

Я создал этот скрипт для выполнения этой задачи, но после окончания я вижу, что JAVA_HOME не обновляется

export JAVA_HOME=/usr/lib/jvm/java-5-oracle/
export PATH=$PATH:$JAVA_HOME    

Вот результат

$ ./javaHome5.sh
$ echo $JAVA_HOME
/usr/lib/jvm/java-6-oracle/

Я думаю, что причина этого не в том, что скрипт выполняется в своем собственном терминале, поэтому, когда скрипт завершится, текущий терминал не будет затронут.

В настоящее время я нашел только один способ:

  1. Редактировать мой ~/.bashrc и измените JAVA_HOME var
  2. Бежать source ~/.bashrc применить изменения в текущем терминале. Который снова не может быть применен в сценарии, так как source Команда должна быть запущена в текущем окне.

Излишне говорить, что это изменение относится ко всем новым окнам терминала, поэтому мне практически нужно сделать это дважды: один перед запуском моего приложения и еще один раз сразу после этого, просто чтобы восстановить значения параметров среды по умолчанию. Это не очень удобно.

У вас есть идеи, как я могу изменить эту переменную, используя скрипт?

1 ответ

Решение

Это невозможно. Как вы правильно заметили, ваш скрипт выполняется в собственной оболочке. Эта оболочка получает копию среды своей родительской оболочки, когда она разветвлена, и у нее нет возможности получить доступ к среде родительской оболочки. И это хорошо, потому что в противном случае сценарии могут иметь всевозможные непредвиденные побочные эффекты.;)

Чтобы изменить переменные в вашей текущей оболочке, вы всегда можете получить исходный файл скрипта (вместо того, чтобы выполнять его как независимый процесс), чтобы скрипт выполнялся вашей текущей оболочкой вместо разветвленной. Если ваш скрипт называется myscript.shназывайте это как source myscript.sh вместо ./myscript.sh,

Другие вопросы по тегам