Как я могу заставить переменные среды «экспортироваться» в скрипт оболочки?

У меня есть несколько учетных записей Amazon EC2 и вы хотите быстро переключаться между переменными, такими как $EC2_HOME , используя скрипт.

У меня есть сценарий оболочки, настроенный так:

 #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME 

Когда я запускаю скрипт, я знаю, что установлен EC2_HOME , но я думал, что использование export приведет к тому, что переменная будет EC2_HOME после завершения скрипта. Это не так, как работает echo $EC_HOME ничего не показывает.

Я знаю, что это должно быть очень рудиментарное знание сценариев Linux, но я этого не знаю. Я пробовал искать связанные вопросы без везения – так что мои извинения, если это дубликат.

  • Как запустить программу, перенаправить ее вывод и отобразить вывод на экране?
  • set -A команда не запущена в Linux
  • Shell Script считывает метаданные файла, а затем mv каждый в новый каталог
  • Как предотвратить завершение сценария при выходе из оболочки?
  • Почему функция не возвращается, пока фоновый процесс не завершится?
  • Лучший способ обмена именами файлов
  • Bash, как запустить некоторые фоновые процессы, но ждать других?
  • Можно ли использовать shebang для самого источника файла в текущей среде bash?
  • 2 Solutions collect form web for “Как я могу заставить переменные среды «экспортироваться» в скрипт оболочки?”

    Вы должны указать свой сценарий, используя

     . ./script 

    или

     source ./script 

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

     $ source ./a.sh 

    или эквивалентно (но немного более портативно), используйте команду POSIX dot :

     $ . ./a.sh 

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

    Быть ближе к запуску скрипта . a.sh . a.sh найдет a.sh, выполнив поиск в каталогах в PATH среды PATH .


    Есть некоторые тонкости в том, как они себя ведут, и есть ли . и source те же (или присутствуют вообще). . ./a.sh . ./a.sh , безусловно, будет вести себя одинаково в каждой совместимой с POSIX оболочке, но source и . , и . a.sh . a.sh и . ./a.sh . ./a.sh , может варьироваться. Для source Bash и . одинаковы во всех случаях; для source zsh всегда проверяет текущий каталог ; ksh по существу схож.

    Если имя сценария задано как путь (содержащий / ), этот путь используется напрямую во всех случаях. Самая мобильно надежная вещь . ./script . ./script или . /path/to/script . /path/to/script .

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