Искусство программирования на языке сценариев командной оболочки
Шрифт:
suspend
Действует аналогично нажатию на комбинацию клавиш Control+– Z, за исключением того, что она приостанавливает работу командной оболочки.
logout
Завершает сеанс работы командной оболочки, можно указать необязательный код завершения.
times
Выдает статистику исполнения команд в единицах системного времени, в следующем виде:
0m0.020s 0m0.020s
Имеет весьма ограниченную сферу применения, так как сценарии крайне редко подвергаются профилированию.
kill
Принудительное завершение процесса путем передачи ему соответствующего сигнала (см. Пример 13-4).
Пример 11-23.
#!/bin/bash
# self-destruct.sh
kill $$ # Сценарий завершает себя сам.
# Надеюсь вы еще не забыли, что "$$" -- это PID сценария.
echo "Эта строка никогда не будет выведена."
# Вместо него на stdout будет выведено сообщение "Terminated".
exit 0
# Какой код завершения вернет сценарий?
#
# sh self-destruct.sh
# echo $?
# 143
#
# 143 = 128 + 15
# сигнал TERM
command
Директива command COMMAND запрещает использование псевдонимов и функций с именем "COMMAND".
builtin
Конструкция builtin BUILTIN_COMMAND запускает внутреннюю команду "BUILTIN_COMMAND", на время запрещая использование функций и внешних системных команд с тем же именем.
enable
Либо запрещает, либо разрешает вызов внутренних команд. Например, enable -n kill запрещает использование внутренней команды kill, в результате, когда интерпретатор встретит команду kill, то он вызовет внешнюю команду kill, т.е. /bin/kill.
Команда enable -a выведет список всех внутренних команд, указывая для каждой -- действительно ли она разрешена. Команда enable -f filename загрузит внутренние команды как разделяемую библиотеку (DLL) из указанного объектного файла [ 26 ] .
26
Как правило, исходные тексты подобных библиотек, на языке C, располагаются в каталоге /usr/share/doc/bash-?.??/functions.
Обратите внимание: ключ -f команды enable может отсутствовать в некоторых системах.
autoload
Перенесена
в Bash из ksh. Если функция объявлена как autoload, то она будет загружена из внешнего файла в момент первого вызова [ 27 ] . Такой прием помогает экономить системные ресурсы.Обратите внимание: autoload не является частью ядра Bash. Ее необходимо загрузить с помощью команды enable -f (см. выше).
Таблица 11-1. Идентификация заданий
27
Тот же эффект можно получить с помощью typeset -fu.
Нотация | Описание |
---|---|
%N | Номер задания [N] |
%S | Вызов (командная строка) задания, которая начинается со строки S |
%?S | Вызов (командная строка) задания, которая содержит строку S |
%% | "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) |
%+ | "текущее" задание (последнее задание приостановленное на переднем плане или запущенное в фоне) |
%- | Последнее задание |
$! | Последний фоновый процесс |
Глава 12. Внешние команды, программы и утилиты
Благодаря стандартизации набора команд UNIX-систем, сценарии, на языке командной оболочки, могут быть легко перенесены из системы в систему практически без изменений. Мощь сценариев складывется из наборв системных команд и директив командной оболочки с простыми программными конструкциями.
12.1. Базовые команды
Первая команда, с которой сталкиваются новички
ls
Команда вывода "списка" файлов. Многие недооценивают всю мощь этой скромной команды. Например, с ключом – R, рекурсивный обход дерева каталогов, командв ls выводит содержимое каталогов в виде древовидной структуры. Вот еще ряд любопытных ключей (опций) команды ls: – S– - сортировка по размеру файлов, – t– - сортировка по времени последней модификации файла и – i– - выводит список файлов с их inode (см. Пример 12-3).
Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls
#!/bin/bash
# burn-cd.sh
# Сценарий, автоматизирующий процесс прожигания CDR.
SPEED=2 # Если ваше "железо" поддерживает более высокую скорость записи -- можете увеличить этот параметр
IMAGEFILE=cdimage.iso
CONTENTSFILE=contents