UNIX — универсальная среда программирования - Керниган Брайан Уилсон
$
(Если в строке, следующей за командой echo, есть символ ctl-g, то при появлении ее на экране зазвонит звонок.) В этих примерах нужны скобки, так как приоритет '&' выше, чем у ';'.
Символ & может завершать команды, а поскольку конвейеры являются командами, в скобках для запуска конвейеров как фоновых процессов нет необходимости, поэтому
$ pr файл | lpr &
позволяет выдать файл на печатающее устройство, не ожидая окончания выполнения команды. Использование скобок дает тот же эффект, но требует введения большего числа символов:
$ (pr файл | lpr ) & To же, что и в предыдущем примере
Большинство команд допускает наличие аргументов в командной строке, таких, как файл в предыдущем примере (аргумент команды pr). Аргументами служат слова, разделенные пробелами и символами табуляции, которые обычно именуют файлы, предназначенные для обработки командой. Однако они рассматриваются просто как строки, и программа может интерпретировать их любым подходящим для нее способом. Например, команда pr допускает имена файлов, которые нужно напечатать, команда echo посылает эхо своих аргументов без всякой интерпретации, а первый аргумент команды grep специфицирует строку-шаблон для поиска. И конечно, многие команды имеют необязательные параметры (флаги), задаваемые аргументами, начинающимися со знака “-”.
Различные специальные символы, интерпретируемые shell, такие, как <, >, |, ; и &, не являются аргументами команд, запускаемых интерпретатором. Они управляют самим процессом запуска. Например,
$ echo Hello > junk
требует, чтобы интерпретатор запустил команду echo с одним аргументом Hello и поместил выходной поток в файл junk. Строка > junk не является аргументом команды echo; она интерпретируется shell, и echo никогда ее "не увидит". На самом деле, данная строка может и не быть последней в командной строке:
$ > junk echo Hello
Это идентичный запуск, хотя и менее очевидный.
Упражнение 3.1В чем состоит различие между следующими командами?
$ cat file | pr
$ pr <file
$ pr file
(С течением времени операция переключения < потеряла свою связь с программными каналами; "cat file |" считается более естественным, чем "< file".)
3.2 Метасимволы
Интерпретатор распознает еще ряд символов как специальные. Наиболее часто используется звездочка *, указывающая, что нужно искать в каталоге имена файлов, у которых вместо * может быть любая последовательность символов. Например,
$ echo *
есть не что иное, как некое подобие команды ls. В гл. 1 мы не отметили, что во избежание проблем с именами '.' и '..', которые присутствуют в любом каталоге, символы подстановки в именах файлов нельзя применять к именам файлов, начинающимся с точки. Правило таково: символы подстановки в именах файлов действуют на имена файлов, начинающихся с точки, только в том случае, если точка явно задана в шаблоне. Как обычно, "рассудительная" команда echo прояснит ситуацию:
$ ls
.profile
junk
temp
$ echo *
junk temp
$ echo .*
. .. .profile
$
Символы со специальным значением, подобные *, называются метасимволами. Существует множество метасимволов (в табл. 3.1 приводится их полный список, но некоторые символы мы обсудим только в гл. 5).
> prog > file — переключить стандартный выходной поток в файл >> prog >> file — добавить стандартный выходной поток к файлу < prog < file — извлечь стандартней выходной поток из файла | p1 | p2 — передать стандартный выходной поток p1 как стандартный выходной поток для p2 <<str "Документ здесь": стандартный выходной поток задается в последующих строках до строки, состоящей из одного символа str * Задает любую строку, состоящую из нуля или более символов, в имени файла ? Задает любой символ в имени файла [ccc] Задает любой символ из [ccc] в имени файла (допустимы диапазоны, такие, как 0-9 или a-z) ; Завершает команды: p1; p2 — выполнить p1, затем p2 & Выполняет аналогичные функции, но не ждет окончания p1 `...` Инициирует выполнение команд(ы) в ...; `...` заменяется своим стандартным выводом (...) Инициирует выполнение команд(ы) в ... в порожденном shell {...} Инициирует выполнение команд(ы) в ... в текущем вызове shell (используется редко) $1, $2, ... Заменяются аргументами командного файла $var Значение переменной var в программе на языке shell ${var} Значение var; исключает коллизии в случае конкатенации переменной с последующим текстом (см. также табл. 5.3) c — использовать непосредственно символ c, перевод строки отбрасывается '...' Означает непосредственное использование "..." Означает непосредственное использование, но после того, как $, `...` и будут интерпретированы # В начале слова означает, что вся остальная строка рассматривается как комментарий (но не в седьмой версии) var=value Присваивает value переменной var p1 && p2 Предписывает выполнить p1; в случае успеха выполнить p2 p1 || p2 Предписывает выполнить p1; в случае неудачи выполнить p2Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение UNIX — универсальная среда программирования - Керниган Брайан Уилсон, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


