понедельник, 1 февраля 2010 г.

Малоизвестные (мне) возможности bash

Bash может гораздо больше, чем тот набор возможностей, которые я использую повседневно.

Трюк с использованием конструкции {часть_старого_имени,часть_нового_имени} при копировании или переносе файла я знал давно.

Например конструкцию
cp /usr/portage/local/local_overlay/app-misc/2gis-data/2gis-data-2010.{1,2}.ebuild

bash перед выполнением развернет в
cp /usr/portage/local/local_overlay/app-misc/2gis-data/2gis-data-2010.1.ebuild /usr/portage/local/local_overlay/app-misc/2gis-data/2gis-data-2010.2.ebuild


Но кое-что из приведенного ниже не знал (или знал, но забыл).

!! - повтор последней команды.
yuri@gentoobox ~ $ echo Hello
Hello
yuri@gentoobox ~ $ !! world
echo Hello world
Hello world
yuri@gentoobox ~ $


!:1 !:2 !:3 и т.д. содержат параметры (аргументы) предыдущей команды
gentoobox yuri # ls -lh /var/log/pptp.log
-rw------- 1 root root 168M Фев  1 20:57 /var/log/pptp.log
gentoobox yuri # echo > !:2
echo > /var/log/pptp.log
gentoobox yuri # ls -lh /var/log/pptp.log
-rw------- 1 root root 1 Фев  1 20:59 /var/log/pptp.log

!*, как и !$ содержит все параметры предыдущей команды.

Нажатие Alt-. (alt с точкой) вставит последний параметр предыдущей команды непосредственно в командную строку. Повторное нажатие этой комбинации приводит к перебору последних параметров команд из истории.

Нажатие Ctrl-r включит режим поиска в истории команд. Поиск будет происходить непосредственно в процессе набора команды.

Ctrl-u - стирает весь текст слева от курсора
Ctrl-k - стирает весь текст справа от курсора
Ctrl-w - стирает слово слева от курсора
Всё стертое попадает в буфер
Ctrl-y - вставляет содержимое буфера
Ctrl-a - перейти к началу строки
Ctrl-e - перейти к концу строки
Esc-l - меняет все буквы в следующем слове на строчные (WORD->word)
Esc-u - меняет все буквы в следующем слове на заглавные (word->WORD)
Esc-c - делает первую букву заглавной, остальные строчными (WORD->Word; word->Word)
Esc-t - меняет два последних слова местами (Hello world -> world Hello)

Esc-{ - вставляет все файлы из текущего каталога, удовлетворяющие условиям:
yuri@gentoobox ~ $ touch test{1,2,3,45,1234,dsg}
yuri@gentoobox ~ $ rm te  // Тут нажимаем Esc-{
yuri@gentoobox ~ $ rm te{st{1{,234},2,3,45,dsg},xt} // Видно, что в список попал невинный каталог text

Комментариев нет:

Отправить комментарий