У меня есть несколько учетных записей Amazon EC2 и я хочу быстро переключаться между переменными, например $EC2_HOME
, с помощью сценария.
У меня есть сценарий оболочки, настроенный так:
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
Когда я запускаю скрипт, я знаю, что EC2_HOME
он установлен, но я подумал, что использование export
заставит переменную остаться после завершения скрипта. Это не так, как работает, echo $EC_HOME
ничего не показывает.
Я знаю, что это должно быть очень элементарное знание сценариев Linux, но я этого не знаю. Я безуспешно пытался найти похожие вопросы - так что извиняюсь, если это дубликат.
.
илиsource
, вы не порождаете новый дочерний процесс, вы запускаете команды в текущей оболочке..
илиsource
. Почему это происходит ?exit
утверждение, поэтому он не подходит для поиска.source ./script
работает совершенно нормально,sudo source ./script.sh
говоритsudo: source: command not found
. Как я могу сделать это с помощью sudo?sudo
и от настроек конфигурации/etc/sudoers
вы можете или не можете сохранить свою среду при выполнении команд сsudo
. Я предлагаю вам попытаться получить исходный текст вашего сценария, а затем запустить егоsudo
с-E
опцией сохранения среды. Если это не сработает, я полагаю, вы можете сделать очень мало.Когда вы запускаете скрипт, он получает собственную оболочку и собственную среду, которые снова исчезают, как только скрипт завершается. Чтобы сохранить переменные окружения, поставьте скрипт в вашу текущую оболочку:
или эквивалентно (но немного более переносимо) используйте команду точки POSIX :
Затем определения будут помещены в среду вашей текущей оболочки и будут наследоваться всеми программами, которые вы запускаете из нее.
Чтобы быть ближе к запуску скрипта,
. a.sh
найдите a.sh путем поиска в каталогах вPATH
переменной окружения.Есть некоторые тонкости в том, как они ведут себя,
.
иsource
являются ли они одинаковыми (или присутствуют вообще).. ./a.sh
определенно будет вести себя одинаково в каждой POSIX-совместимой оболочке, ноsource
и.
, и,. a.sh
и. ./a.sh
, могут отличаться. Для Башsource
и.
одинаковы во всех случаях; для Zshsource
всегда проверяет текущий каталог первой ; Кш по сути похож.Если имя сценария задано в виде пути (содержащего a
/
), этот путь используется непосредственно во всех случаях. Наиболее переносимая надежная вещь - это. ./script
или. /path/to/script
.источник
Просто для записи.
Если вы хотите запустить скрипт из интернета, который экспортирует env в систему
Вы можете использовать следующий формат
Например:
источник