Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Экспортирование локальных переменных в среду sell






При выполнении процедуры ей можно передавать как позиционные параметры (см. выше) так и ключевые - локальные переменные порожденного процесса.

Локальные переменные помещаются в область локальных переменных, связанную с конкретным текущим процессом, породившим переменную. Они доступны только этому процессу и недоступны порожденным процессам-потомкам (например – sh-процедурам). Переменные другим процессам можно передавать неявно через среду. Для этого локальная переменная должна быть экспортирована (включена) в среду, в которой исполняется процедура, использующая эту переменную. Среда пользователя, т.е. глобальные переменные, доступна всем процессам.

Экспортирования не требуют переменные, созданные в теле самой процедуры. Процедура является порожденным процессом по отношению к оболочке, т.е. порожденный процесс не может изменить значения локальных переменных родительского процесса.

Три формата команды экспортирования:

$export список имен локальных переменных

$export имя_лок_переменной=значение

$export (без параметров) - выводит перечень всех экспортированных локальных и переменных среды (аналог команды env).

Рассмотрим некоторый фрагмент протокола работы с системой.

$color = red переменная определена, но не экспортирована

$export count = 1 переменная определена и экспортирована, т.е. потенциально доступна всем порождаемым процессам

$export

PATH =

HOME =

color = red

count = 1

$cat proc1 создание порожденного процесса процедуры

echo $color

echo $count

exit завершение процесса

< ctrl.D>

$proc1 выполнение процедуры на экран выводится значение только одной, экспортированной переменной; вторая переменная – не определена

$cat proc2 еще одна процедура

color = black

count = 2

echo $color

echo $count

exit

$proc2

black

выводятся значения обеих переменных, т.к. они определены в самой процедуре

$echo $color

red

$echo $count

1 $

На экран выводятся первоначальные значения переменных родительскoго процесса – shell. Новые (измененные) значения локальных переменных существуют только на время существования породившего их порожденного процесса. Чтобы изменить значене переменной родительского процесса ее надо экспортировать. Но после завершения порожденного среда родительского восстанавливается.

Еще пример.

$export color=black

$kch

$echo $color

black

$color = red

$echo $color

red

$exit

$echo $color

black

$

Здесь порожденным процессом является вторичная оболочка Korn schell. Среда родительского процесса не изменена, т.е. сохранилось значение экспортированной в нее переменной. Порожденные процессы не могут изменить среду родительских процессов.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.