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


Программирование на языке сценариев командной оболочки - стр. 226


bash$ ls -l {b*,c*,*est*}

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ echo *

a.1 b.1 c.1 t2.sh test1.txt

bash$ echo t*

t2.sh test1.txt

Даже команда echo может интерпретировать шаблонные символы в именах файлов.

См. также Пример 10-4.

Глава 19. Подоболочки, или Subshells

Запуск сценария приводит к запуску дочернего командного интерпретатора. Который выполняет интерпретацию и исполнение списка команд, содержащихся в файле сценария, точно так же, как если бы они были введены из командной строки. Любой сценарий запускается как дочерний процесс родительской командной оболочки, той самой, которая выводит перед вами строку приглашения к вводу на консоли или в окне xterm.

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

Список команд в круглых скобках

( command1; command2; command3; ... )

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

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

Пример 19-1. Область видимости переменных

#!/bin/bash # subshell.sh

echo

outer_variable=Outer

( inner_variable=Inner echo "Дочерний процесс, \"inner_variable\" = $inner_variable" echo "Дочерний процесс, \"outer\" = $outer_variable" )

echo

if [ -z "$inner_variable" ] then echo "Переменная inner_variable не определена в родительской оболочке" else echo "Переменная inner_variable определена в родительской оболочке" fi

echo "Родительский процесс, \"inner_variable\" = $inner_variable" # Переменная $inner_variable не будет определена # потому, что переменные, определенные в дочернем процессе, # ведут себя как "локальные переменные".




- Начало -  - Назад -  - Вперед -