экспорт не работает в моем сценарии оболочки

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

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

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

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

#!/bin/sh
echo $variable

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

 lesmana28 мая 2012 г., 11:12
 linuxeasy28 мая 2012 г., 10:52
и как вы выполняете эти сценарии оболочки?
 Xander28 мая 2012 г., 11:13
Сначала я запускаю 1.sh в терминале, затем запускаю 2.sh в том же терминале ...

Ответы на вопрос(2)

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

Если вы выполняете ваши файлы, как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."

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

Ваш ответ на вопрос