$ cwd=`pwd` # напоминаю, что команда pwd возвращает
# путь к текущему каталогу
Можно подставлять значения не только определенных вами переменных, но и переменных окружения. Так, чтобы поэкранно вывести список всех процессов, запущенных от вашего имени, введите:
$ ps -ef | grep $USER | less
3.4.5. Шаблоны имен файлов
Этот механизм позволяет не перечислять похоже выглядящие имена файлов и каталогов, а указать на целую группу имен, задав краткий образец. Перед отправкой команды на выполнение оболочка раскрывает шаблон, то есть заменяет образец всеми именами, подходящими под этот образец, и выполняет команду для каждого файла или каталога из этой группы. Шаблоны указываются с помощью специальных символов, перечисленных в таблице 3.3. Символы шаблона можно комбинировать в одной команде.
Символы шаблонов Таблица 3.3
| Символ |
Значение |
Пример |
| * |
Произвольная строка символов, в том числе пустая |
~/*.png — все файлы в домашнем каталоге с расширением png; Glava* — файлы Glava, Glava03 и Glava.old |
| ? |
Любой одиночный символ |
Glava?? — файлы Glava03 и GlavaXZ, но не Glava и не Glava.old |
| [m,M,x] |
Любой символ ив перечисленных в скобках |
Glava0[3,8] — файлы Glava03 и Glava08, Glava?[3,8] — файлы Glava03, Glava08, Glava13, Glava18, Glava23 |
| [a-nA-N] |
Любой символ ив указанных интервалов |
Glava0[2-4,9] — Glava02, Glava03, Glava04, Glava09 |
| [^a-n,x,y] |
Любой символ, на указанный в скобках |
Glava[^0]* — все главы, начиная с 11 |
Символы шаблона можно использовать и как обычные символы в именах файлов. Тогда их нужно экранировать, чтобы оболочка не приступила к их раскрытию:
$ touch \* # создаст файл с именем "*". Только не
# удаляйте его потом командой rm * !
$ rm Glava0\[3\,8\] # удалит файл с именем Glava0[3,8],
# а не Glava03 и Glava08.
3.4.6. Потоки ввода-вывода
Как я уже сказал, каждому процессу сопоставлена таблица открытых им файлов. Три первых позиции в этой таблице заняты всегда: каждый процесс открывает потоки (помните, что в UNIX файл — это и есть поток данных?) для ввода и вывода данных, а также вывода сообщений об ошибках и другой диагностической информации. Эти потоки:
♦ 0 — стандартный ввод ( stdin),
♦ 1 — стандартный вывод ( stdout),
♦ 2 — стандартный поток сообщений об ошибках ( stderr).
Ссылаться на эти потоки можно по их файловым дескрипторам . 0, 1 и 2 — это и есть такие дескрипторы.
По умолчанию потоки ввода-вывода связываются с консолью, с которой запущен процесс: стандартный ввод — с клавиатурой, другие два потока — с экраном (рис. 3.5, потоки cmd1).
Все потоки можно перенаправить в другой файл. Это может быть файл на диске, файл устройства (например, принтер или /dev/null) или стандартный поток другого процесса.
Для перенаправления стандартного вывода команды используется символ >(«больше»). Если местом назначения служит файл, то можно его не перезаписывать, а присоединить ( append ) выводимые данные в его конец. Для такого перенаправления применяется символ >>.
Стандартный ввод перенаправляется символом <(«меньше»).
Для перенаправления стандартного потока ошибок используется конструкция 2>. Чтобы присоединить stderrк stdoutи перенаправить их вместе, пользуйтесь переадресацией 2>&1.
Для направления стандартного вывода одной команды на стандартный ввод другой применяется символ |— уже знакомый вам конвейер.
Ситуация, изображенная на рис. 3.5, могла бы сложиться после выполнения следующих команд:
cmd2 < file1.txt | cmd3 2>&1 > file2.txt
cmd4 2> /dev/null | tee file3.txt file4.txt file5.txt

Рис. 3.5. Перенаправление потоков ввода-вывода
Команда-фильтр teeкопирует данные со своего стандартного ввода в стандартный вывод, дублируя их при этом в указанные ей файлы.
3.4.7. Группировка команд
Кроме конвейеров, команды можно соединять в списки. Простейший вид списка — несколько команд, разделенных точкой с запятой:
$ lpr myfile.txt ; lpq
Команды в таком списке выполняются последовательно: сначала будет выполнена команда постановки задания в очередь печати, а потом проверено состояние принтера. Оболочка ждет завершения каждой команды, чтобы отправить на выполнение следующую (синхронный режим).
Читать дальше
Конец ознакомительного отрывка
Купить книгу