Выполнить скрипт в текущей оболочке с помощью:
source your-script # this runs your-script in the existing shell
... или, при использовании POSIX оболочки ...
. your-script # likewise; that space is intentional!
не
./your-script # this starts a new shell just for `your-script`; its variables
# are lost when it exits!
. ..если вы хотите, чтобы переменные, которые он устанавливает, были доступны для оболочки, которая ее вызывает.
Чтобы быть ясно, export
помещает переменную в среде текущего процесса - но переменные среды распространяются вниз в дочерние процессы, а не до родительских процессов.
Теперь, если ваша цель состоит в том, чтобы определить интерактивную команду, которую легко вызвать, вы можете рассмотреть совершенно иной подход в целом - положить функцию в .bashrc
:
awsSetup() {
echo -n "Enter AWS_ACCESS_KEY_ID: "
read && [[ $REPLY ]] && export AWS_ACCESS_KEY_ID=$REPLY
}
. .., после чего пользователь с этим в своем .bashrc
может запустить awsSetup
, который будет работать в текущей оболочке.
Если вы эхо от родительской оболочки (то есть той, которая запускала './Your-script.sh'), которая не будет/не может работать. Вы можете экспортировать переменную * вверх * в дерево процессов. В этом скрипте он должен работать. –
Есть только одна оболочка, которую я запускаю, и я пытаюсь выполнить эхо сразу после запуска этих трех строк. –
@IshuGupta, неправильно: при запуске скрипта (без использования 'source' или его синтаксиса, совместимого с POSIX' .'), запускается вторая оболочка, которая выходит, когда скрипт выполняет. Таким образом, когда этот скрипт выходит, его переменные больше недоступны. –