Вопрос по linux, terminal, shell – экспорт не работает в моем сценарии оболочки

33

У меня есть два скрипта 1.sh и 2.sh.

1.sh выглядит следующим образом:

#!/bin/sh
variable="thisisit"
export variable

2.sh выглядит следующим образом:

#!/bin/sh
echo $variable

Согласно тому, что я прочитал, выполнение этого (экспорт) может обращаться к переменным в одном сценарии оболочки из другого. Но это не работает в моих сценариях. Может кто-нибудь, пожалуйста, помогите. Заранее спасибо.

Сначала я запускаю 1.sh в терминале, затем запускаю 2.sh в том же терминале ... Xander
и как вы выполняете эти сценарии оболочки? linuxeasy
смотрите также:superuser.com/questions/176783/… а такжеunix.stackexchange.com/questions/3507/… lesmana

Ваш Ответ

2   ответа
73

Если вы выполняете ваши файлы, какsh 1.sh или же./1.sh Затем вы выполняете это в под-оболочке.

Если вы хотите, чтобы изменения были сделаны в вашей текущей оболочке, вы можете сделать:

. 1.sh
# OR
source 1.sh

Пожалуйста, рассмотрите возможность пройти черезсправочно-документация.

"When a script is run using source [or .] it runs within the existing shell, any variables created or modified by the script will remain available after the script completes. In contrast if the script is run just as filename, then a separate subshell (with a completely separate set of variables) would be spawned to run the script."

@ Xander: если источник не работает для вас, вы можете использовать<dot><space><your program name>
ОП использует/bin/shкоторая на многих платформах является минимальной оболочкой POSIX и не будет поддерживатьsource команда.
1.sh: 3: source: not found :( Я не хочу, чтобы мой 1.sh выполнялся из 2.sh, сначала я хочу запустить 1.sh, после закрытия запустить 2.sh .. и получить доступ к переменной в первое из второго .... спасибо за ответы Xander
хммм .. я уже упоминал о. а такжеspace , Я упомянулsource так как это то, что я вижу, люди используют в настоящее время.
Вероятно, стоит добавить ссылку наreference documentation и его описание: "Когда скрипт запускается с использованиемsource [или же. ] он запускается в существующей оболочке, любые переменные, созданные или измененные сценарием, останутся доступными после его завершения. Напротив, если скрипт выполняется так же, какfilenameзатем для запуска скрипта будет создан отдельный подоболочек (с совершенно отдельным набором переменных). & quot;
6

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

#!/bin/sh
FOO=bar
env | grep '^FOO='

а также

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='

чтобы увидеть эффектexport.

Чтобы получить переменную из1.sh в2.shлибо позвони2.sh от1.shили импортировать1.sh в2.sh:

#!/bin/sh
. ./1.sh
echo $variable

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