Средства группировки:
; и <перевод строки> | определяют последовательное выполнение команд; | ||
& | асинхронное (фоновое) выполнение предшествующей команды; | ||
&& | выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать; | ||
выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать. |
При выполнении команды в асинхронном режиме (после команды стоит один амперсанд) на экран выводится номер процесса, соответствующий выполняемой команде, и система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем.
Например, наберем (экзотическую) команду "find" в фоновом режиме для поиска в системе , начиная от корня "/", файла с именем "conf", а затем "pwd" в обычном режиме. На экране этот фрагмент будет выглядеть следующим образом:
--------------------------------
| $ find / -name conf -print & | ввод команды "find"
| |
| 288 | номер (PID) фонового процесса
| |
| $ pwd | ввод команды "pwd"
| |
| /mnt/lab/asu | результат работы "pwd"
| |
| $ | возвращение shell в промптер
| |
| /usr/include/sys/conf | результат работы "find"
| |
--------------------------------
Иногда необходимо, чтобы все фоновые процессы завершились, прежде чем будет выполняться какой-то расчет. Для этого служит специальная команда "wait [PID]". Эта команда ждет завершения указанного идентификатором (числом) фонового процесса. Если команда без параметра, то она ждет завершения всех фоновых процессов, дочерних для данного "sh".
Для группировки команд также могут использоваться фигурные "{}" и круглые "()" скобки. Рассмотрим примеры, сочетающие различные способы группировки:
Если введена командная строка
k1 && k2; k3
где k1, k2 и k3 - какие-то команды, то "k2" будет выполнена только при успешном завершении "k1"; после любого из исходов обработки "k2" (т.е. "k2" будет выполнена, либо пропущена) будет выполнена "k3".
ПРЕДУПРЕЖДЕНИЕ. Если параллельно обрабатывается или создается файл с ОДНИМ именем (например, несколько пользователей вызвали в редактор один и тот же файл), то в системе продолжит существование тот вариант файла, который возвращен (записан) в систему последним. Это частая ошибка пользователей персональных компьютеров, которые редактируют один файл параллельно с нескольких экранов. |