14.3.7. Экспорт переменных в дочерние процессы
14.3.7. Экспорт переменных в дочерние процессы
Для тех, кто только начинает работать с интерпретатором shell, существенное затруднение представляет экспорт переменных в дочерние процессы. Теперь, после рассмотрения основных принципов работы с переменными среды, перейдем к
выполнению практических задач. Ниже приводится пример, сценария, который вызывает другой сценарий. Вызываемый сценарий фактически и является дочерним процессом.
Рассматриваемый листинг включает два небольших сценария под именами father и child. Сценарий father задает переменную с именем film, значение которой "A Few Good Men". Эта переменная отображается на экране, затем вызывается другой сценарий под названием child. Данный сценарий отображает переменную film из первого сценария. Перед отображением на экране значением переменной film становится "Die Hard". Затем управление передается назад, сценарию father, и значение переменной снова выводится на экран.
$ pg father
#!/bin/sh
# сценарий father.
echo "this ls the father"
FILM="A Few Good Men"
echo "I like the film: $FILM"
# вызов сценария child
child
echo "back to father"
echo "and the film ls :$FILM"
$ pg child
#!/bin/sh
# сценарий child
echo "called from father..! am the child"
echo "film name is :$FILM"
FILM="Die Hard"
echo "changing film to :$FILM"
Рассмотрим, что будет отображаться на экране в результате выполнения сценария.
$ father
this ls the father
I like the film :A Few Good Men
called from father… i am the child
film name is :
changing film to :Die Hard
back to father
and the film ls :A Few Good Men
Сценарий child не может возвратить переменную film, поскольку эта переменная не может быть экспортирована в сценарий father.
Теперь, если команду export добавить в сценарий father, сценарий child получит всю информацию о переменной film.
$ pg father
#!/bin/sh
# сценарий father.
echo "this ls the father"
FILM="A Few Good Men"
echo "I like the film :$FILM"
#вызов сценария child
#сначала экспортируйте переменную
export FILM
child
echo "back to father"
echo "and the film is :$FILM"
$ father2
this ls the father
I like the film :A Few Good Men
called from father… i am the child
film name ls :A Few Good Men
changing film to :Die Hard
back to father
and the film ls :A Few Good Men
После того как команда export включена в состав сценария, можно выполнить произвольное число процессов. И всем этим процессам известно о наличии переменной FILM.
Нельзя выполнять экспорт переменных из дочерних процессов в родительский процесс; однако с помощью изменения направления этого можно добиться.