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


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


diff <(command1) <(command2) # Выдаст различия в выводе команд.

tar cf >(bzip2 -c > file.tar.bz2) $directory_name # Вызовет "tar cf /dev/fd/?? $directory_name" и затем "bzip2 -c > file.tar.bz2". # # Из-за особенностей, присущих некоторым системам, связанным с /dev/fd/<n>, # канал между командами не обязательно должен быть именованным. # # Это можно сделать и так. # bzip2 -c < pipe > file.tar.bz2& tar cf pipe $directory_name rm pipe # или exec 3>&1 tar cf /dev/fd/4 $directory_name 4>&1 >&3 3>&- | bzip2 -c > file.tar.bz2 3>&- exec 3>&-

# Спасибо S.C.

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

# Фрагмент сценария из дистрибутива SuSE:

while read des what mask iface; do # Некоторые команды ... done < <(route -n)

# Чтобы проверить это, попробуем вставить команду, выполняющую какие либо действия. while read des what mask iface; do echo $des $what $mask $iface done < <(route -n)

# Вывод на экран: # Kernel IP routing table # Destination Gateway Genmask Flags Metric Ref Use Iface # 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

# Как указывает S.C. -- более простой для понимания эквивалент: route -n | while read des what mask iface; do # Переменные берут значения с устройства вывода конвейера (канала). echo $des $what $mask $iface done # На экран выводится то же самое, что и выше. # Однако, Ulrich Gayer отметил, что ... #+ этот вариант запускает цикл while в подоболочке, #+ и поэтому переменные не видны за пределами цикла, после закрытия канала.

Глава 22. Функции

Подобно "настоящим" языкам программирования, Bash тоже имеет функции, хотя и в несколько ограниченном варианте. Функция -- это подпрограмма, блок кода который реализует набор операций, своего рода "черный ящик", предназначенный для выполнения конкретной задачи. Функции могут использоваться везде, где имеются участки повторяющегося кода.

function function_name {



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