Как я могу сделать переменные среды “экспортируемыми” в сценарии оболочки, слоняются поблизости?

Нет абсолютно никакого различия между ArchBang и ванильной дугой + openbox + несколько нечетных пакетов АУРА и некоторая первоначальная конфигурация. Можно установить ArchBang и удалить все это, и у Вас просто будет Arch.
Вы используете точно те же зеркала в качестве Arch Linux, тот же АУР как пользователи Linux Arch и тот же диспетчер пакетов как Arch. Единственная разница - то, что установочный носитель установит некоторые дополнительные пакеты и некоторую конфигурацию, реализованную для Вас.

Если Форумы Дуги "бросают" пользователей для того, чтобы задать вопросы, которые не характерны для установочного носителя ArchBang и начальной конфигурации, потому что они, оказалось, устанавливали Дугу с помощью носителя установки ArchBang..., который довольно причудлив.

56
27.11.2016, 22:32
4 ответа

Необходимо получить сценарий, с

. ./script

или

source ./script
61
27.01.2020, 19:33
  • 1
    , которым причина состоит в том, что Ваш сценарий порождает новый процесс оболочки как ребенка текущей оболочки. Любые изменения среды, которые Вы делаете в дочернем процессе, не могут влиять на родителя. Когда Вы используете . или source, Вы не порождаете новый дочерний процесс, Вы выполняете команды в текущей оболочке. –  glenn jackman 27.01.2012, 22:32
  • 2
    @glennjackman у меня есть подобная проблема и я попробовал Ваше решение, но это регистрирует меня прочь от оболочки, когда я делаю . или source. Почему это происходит? –  Patryk 21.02.2012, 15:03
  • 3
    @Patryk: возможно, Ваш сценарий имеет exit оператор, таким образом, это не подходит, чтобы быть полученным. –  enzotib 21.02.2012, 15:24
  • 4
    В то время как source ./script абсолютно прекрасные работы, sudo source ./script.sh говорит sudo: source: command not found. Как я могу сделать это использование sudo? –  71GA 27.09.2014, 16:37
  • 5
    @71GA: в зависимости от предпочтений компиляции sudo и в зависимости от параметров конфигурации в /etc/sudoers Вы можете или не можете сохранить свою среду при выполнении команд с sudo. Я предлагаю, чтобы Вы попытались получить свой сценарий и затем работать sudo с -E опция сохранить среду. Если это не работает, я предполагаю, что существует очень мало, можно сделать. –  enzotib 27.09.2014, 16:52

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

$ source ./a.sh

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

$ . ./a.sh

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

Чтобы быть ближе к выполнению скрипта, . a.sh найдет a.sh путем поиска по каталогам в переменной окружения PATH.


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

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

36
27.01.2020, 19:33

Просто для протокола.

Если вы хотите запустить скрипт из Интернета, который экспортирует env в систему

вы можете использовать следующий формат

source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)

Например:

source <(curl -s -L https://example.com/install.sh)
2
20.08.2021, 13:29

Попробуйте

exec./script

Команда exec запускает сценарий в текущей оболочке без запуска неинтерактивной оболочки.

-1
20.08.2021, 13:29

Теги

Похожие вопросы