Экспорт не работает в моей оболочке script
У меня есть два сценария 1.sh и 2.sh.
1.sh выглядит следующим образом:
#!/bin/sh
variable="thisisit"
export variable
2.sh выглядит следующим образом:
#!/bin/sh
echo $variable
В соответствии с тем, что я читал, выполнение этого (экспорт) может получить доступ к переменным в одной оболочке script от другой. Но это не работает в моих сценариях. Может кто-нибудь, пожалуйста, помогите. Спасибо заранее.
Ответы
Ответ 1
Если вы выполняете свои файлы, такие как sh 1.sh
или ./1.sh
Затем вы выполняете его в под-оболочке.
Если вы хотите, чтобы изменения были внесены в текущую оболочку, вы можете сделать:
. 1.sh
# OR
source 1.sh
Пожалуйста, рассмотрите справочную документацию.
"Когда выполняется script с использованием source
[или .
], он запускается в пределах существующей оболочки, любые переменные, созданные или измененные с помощью script, будут доступны после завершения script. если script выполняется как filename
, тогда для запуска script будет создана отдельная подоболочка (с полностью отдельным набором переменных).
Ответ 2
export
помещает переменную в исполняемую среду оболочки, поэтому она передается процессам, выполняемым script, но не процессу, вызывающему script или любым другим процессам. Попробуйте выполнить
#!/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