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.

Нельзя выполнять экспорт переменных из дочерних процессов в родительский процесс; однако с помощью изменения направления этого можно добиться.