Подтвердить что ты не робот

Экспорт не работает в моей оболочке script

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

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

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

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

#!/bin/sh
echo $variable

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

4b9b3361

Ответ 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