BASHмачника вызывали?

j1m (j1m@list.ru)

Хакер, номер #075, стр. 075-098-1

Эффективная работа с GNU Bash

К сожалению, уже не за горами те времена, когда в нашем Click'n'Drag'n'Drop мире переведутся истинные юниксоиды. Все меньше и меньше остается тех, кто способен в полной мере использовать возможности командной строки. Поэтому сегодня я покажу тебе, как использовать функциональность bash на полную катушку. А начнем, как и полагается, с самых простых и известных приемов и постепенно перейдем к более сложным.

Работай продуктивно!

Команда cd. Все знают эту, вероятно, чаще всех остальных используемую команду. Да, она предназначена для выполнения перехода в заданный каталог, но обладает двумя полезными свойствами. Вызвав cd без аргументов, ты попадешь в свой домашний каталог, а указав в качестве аргумента символ «-», переместишься в каталог, предшествовавший текущему (тот, в котором ты был до выполнения команды cd).

Выполнение нескольких заданий. Это тоже классические приемы, но довольно полезные, чтобы быть здесь упомянутыми. Наверное, ты знаешь стандартную команду для автоматической сборки и установки софта:

$ ./configure && make && make install

Оператор «&&» означает, что следующая команда должна быть выполнена только в случае успешного завершения предыдущей (программа вернула нулевой код завершения). Есть еще оператор «||». Если бы мы разделили команды таким символом, то следующая команда выполнилась бы при условии ошибочного завершения предыдущей (код завершения > 0). Это можно использовать, например, так:

$ make || echo "failed!"

Если же вторая команда должна быть выполнена в любом случае, то следует отделить ее символом «;». Помимо последовательного выполнения команд, можно заставить shell запускать их параллельно. Оператор «&» означает, что обе команды должны запуститься одновременно, при этом первая уходит в фон. Кстати, оператор «&» чаще всего используется как раз чтобы выполнять команды в фоне:

$ wvdial &

Управление заданиями. Раз уж мы заговорили о том, как отправлять процессы (программы) в фоновое выполнение, то необходимо рассмотреть и способы управления ими. С каждым выполняющимся в фоне процессом связывается понятие «задание». Команда jobs позволяет просмотреть список всех заданий. Вывод ее довольно простой: номер задания, состояние задания и имя команды. Приведу пример:

$ vi &

$ jobs

[1]+ Stopped vi

Возобновить работу задания можно с помощь команды fg номер_задания. При запуске без аргументов возобновляется задание, переведенное в фон последним. Кстати, с помощью комбинации Ctrl+Z можно отправить в фон уже запущенный процесс.

Замены. Одной из самых старых и полезных возможностей не только командных интерпретаторов, но и многих других программ является возможность подстановки символов шаблона. К таким символам относятся: «*» (любая строка), «?» (любой одиночный символ) и «[...]» (любой из перечисленных символов). Думаю, ты не раз пользовался командами типа

$ vi *.c

или даже

$ vi *.[ch]

Первая команда передает редактору vi в качестве аргументов все файлы с расширением .c, а вторая добавляет к ним еще и заголовочные файлы. Каждый знает, как это работает, но не каждый знает, что bash предоставляет еще более изощренные способы подстановки. Например можно делать подстановку не только нескольких одиночных символов (в случае с «[...]»), но целых слов. Рассмотрим пример:

Содержание  Вперед на стр. 075-098-2
ttfb: 232.68699645996 ms