Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

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

j1m (j1m@list.ru)

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


$ ls /usr/{bin,sbin}

Аргумент команды ls разобьется на два значения: /usr/bin и /usr/sbin, и лишь затем они оба будут переданы на обработку ls. Таким образом, на экране мы увидим содержимое обоих каталогов. Помимо таких подстановок, используемых, в основном, для раскрытия путей, существуют и другие, не менее полезные виды, например подстановка результата выполнения команды. Взгляни на реальный прием, которым я постоянно пользуюсь:

$ ldd `which cp`

libc.so.6 => /lib/libc.so.6 (0xb7eb3000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fec000)

Команда which выводит полный путь до исполняемого файла. Заключив ее в обратные кавычки и указав в качестве аргумента команды ldd, мы добились желаемого эффекта: bash выполнил команду which cp и подставил результат ее выполнения как аргумент ldd. Удобно, не правда ли?

Идем дальше, на очереди арифметика :). У тебя, наверное, в системе есть какой-нибудь навороченный калькулятор, который зависит от нескольких десятков библиотек и которым ты пользуешься раз в полгода для всяких мелких расчетов. А у меня нет, я для этих целей использую bash:

$ echo $((5*5+12))

37

В этом примере выражение, записанное в формате $((выражение)), заменяется на результат его вычисления и передается команде echo, которая и выводит результат на экран. Существует еще множество различных видов замен, используемых, в основном, в скриптах и не представляющих особого интереса для обычного пользователя.

История. Давай рассмотрим, какую выгоду можно извлечь из свойства bash заносить все введенные команды в файл истории. Для навигации по истории команд можно использовать клавиши «вверх» и «вниз», а также «PageUp» (первая команда в истории) и «PageDown» (последняя команда в истории). Если необходимо просто выполнить последнюю введенную команду, набивай «!!». Но самой полезной, на мой взгляд, командой для работы с историей является !строка, она выполнит последнюю команду, начинающуюся с указанной строки.

Библиотека readline. Эта либа предназначена для обработки входных данных, bash использует ее для обработки командной строки. Когда ты вводишь команды в ответ на приглашение bash, то, по сути, работаешь именно с этой библиотекой. Она отвечает и за редактирование строки, и за автодополнение (клавиша <TAB>), и за работу с историей, bash'у же передается только результирующая строка. Интересно, что readline обладает многими возможностями современных редакторов, вот только некоторые из них (здесь «C» - это клавиша <Ctrl>, а «M» - <Esc>):

Горячие клавиши readline

M-B - перейти к началу слова

M-F - перейти к концу слова

C-W - уничтожить текст от курсора до начала слова

M-D - уничтожить текст от курсора до конца слова

C-U - уничтожить текст от курсора до начала строки

C-K - уничтожить текст от курсора до конца строки

Назад на стр. 075-098-1  Содержание  Вперед на стр. 075-098-3