Уильям Шоттс - Командная строка Linux. Полное руководство
sleep 10; echo -e "Time's upa"
То же самое можно выразить так:
sleep 10; echo "Time's up" $'a'
8. Продвинутые приемы работы с клавиатурой
Я часто шутливо описываю Unix как «операционную систему для тех, кто любит печатать». Казалось бы, сам факт наличия командной строки доказывает это. Но в действительности пользователи командной строки не любят печатать слишком много. Зачем, если есть так много команд с короткими именами, таких как cp, ls, mv и rm?
Фактически одной из самых заветных целей командной строки является уменьшение объема ввода — возможность выполнить большую часть работы всего несколькими нажатиями клавиш. Другая цель — не позволить рукам оторваться от клавиатуры и коснуться мыши. В этой главе мы рассмотрим возможности bash, увеличивающие скорость и эффективность использования клавиатуры.
Здесь будут представлены следующие команды:
• clear — очищает экран.
• history — выводит содержимое истории команд.
Редактирование командной строки
Для поддержки операций редактирования командной строки bash использует библиотеку (коллекцию подпрограмм, которую могут использовать разные программы) с именем Readline. Мы уже видели некоторые из них. Например, нам знакомы клавиши со стрелками влево и вправо, перемещающие курсор, но существует еще целое множество других операций. Рассматривайте их как дополнительные инструменты, которые можно использовать в работе. Необязательно стремиться изучить их все, но многие из них весьма практичны. Выбирайте те, что вам понравятся.
ПРИМЕЧАНИЕ
Некоторые комбинации клавиш, описываемые далее (особенно те, что включают клавишу ALT), могут перехватываться графическим интерфейсом и использоваться для выполнения других функций. Однако все комбинации без исключения должны правильно работать в виртуальной консоли.
Перемещение курсора
В табл. 8.1 перечислены комбинации клавиш, используемые для перемещения курсора.
Таблица 8.1. Команды перемещения курсора
Клавиша
Действие
CTRL+A
Перемещает курсор в начало строки
CTRL+E
Перемещает курсор в конец строки
CTRL+F
Перемещает курсор на один символ вперед; действует так же, как клавиша со стрелкой вправо
CTRL+B
Перемещает курсор на один символ назад; действует так же, как клавиша со стрелкой влево
ALT+F
Перемещает курсор на одно слово вперед
ALT+B
Перемещает курсор на одно слово назад
CTRL+L
Очищает экран и устанавливает курсор в левый верхний угол. То же самое делает команда clear
Изменение текста
В табл. 8.2 перечислены комбинации клавиш для редактирования символов в командной строке.
Вырезание и вставка (удаление и возврат) текста
В документации к Readline используется термин killing and yanking (удаление и возврат), обозначающий операцию, которую обычно называют вырезанием и вставкой (cutting and pasting). В табл. 8.3 перечислены комбинации клавиш, выполняющие вырезание и вставку. Вырезанные элементы сохраняются в кольцевом буфере, который называется kill-ring (кольцо удалений).
Таблица 8.2. Команды редактирования текста
Клавиша
Действие
CTRL+D
Удаляет символ в позиции курсора
CTRL+T
Меняет местами два символа — в позиции курсора и предшествующий ему
ALT+T
Меняет местами два слова — в позиции курсора и предшествующий ему
ALT+L
Переводит в нижний регистр символы, начиная с символа в позиции курсора и до конца слова
ALT+U
Переводит в верхний регистр символы, начиная с символа в позиции курсора и до конца слова
Таблица 8.3. Команды вырезания и вставки
Клавиша
Действие
CTRL+K
Удаляет символы от позиции курсора до конца строки
CTRL+U
Удаляет символы от позиции курсора до начала строки
ALT+D
Удаляет символы от позиции курсора до конца текущего слова
ALT+BACKSPACE
Удаляет символы от позиции курсора до начала текущего слова. Если курсор находится в начале слова, удаляется предшествующее слово
CTRL+Y
Извлекает текст из кольцевого буфера удалений и вставляет его в позицию курсора
клавиша metaОтважившиеся заглянуть в документацию к Readline, которая находится в разделе «READLINE», на странице справочного руководства (man) для bash, столкнутся с термином клавиша meta (meta key). На современных клавиатурах ей соответствует клавиша ALT, но так было не всегда.
В стародавние времена (до появления IBM-совместимых персональных компьютеров, но после появления Unix) персональные компьютеры не были так широко распространены. Иногда их заменяли устройства, называемые терминалами. Терминал — это коммуникационное устройство с текстовым дисплеем и клавиатурой, имеющее внутри столько электроники, сколько необходимо для отображения символов и перемещения курсора. Терминалы подключались (обычно посредством последовательного кабеля) к большому компьютеру или коммуникационной сети большого компьютера. В то время существовало очень много различных терминалов, имевших разные клавиатуры и дисплеи с разными функциональными возможностями. Так как все они поддерживали как минимум набор символов ASCII, разработчикам программного обеспечения, пишущим переносимые приложения, необходимо было прийти к общему знаменателю. В системах Unix применяется очень сложный способ использования терминалов и их разнообразных возможностей. Поскольку разработчики Readline не были уверены в наличии специализированной управляющей клавиши, они изобрели ее и назвали meta. На современных клавиатурах роль клавиши meta играет ALT, однако если вы все еще используете терминал (до сих пор поддерживаются в Linux!), можно просто нажать и отпустить клавишу ESC, и вы получите эффект нажатия и удержания клавиши ALT.
Дополнение
Другой вариант помощи пользователям реализован в командной оболочке в виде механизма дополнения (completion). Дополнение происходит, когда в процессе ввода команды нажимается клавиша TAB. Давайте посмотрим, как это работает. Допустим, что ваш домашний каталог содержит следующее:
[[email protected] ~]$ ls
Desktop ls-output.txt Pictures Templates Videos
Documents Music Public
Попробуйте ввести следующую строку, но не нажимайте клавишу ENTER:
[[email protected] ~]$ ls l
Теперь нажмите клавишу TAB:
[[email protected] ~]$ ls ls-output.txt
Обратили ли вы внимание, как командная оболочка дополнила командную строку за вас? Попробуйте теперь набрать следующую строку — и снова не нажимайте ENTER):
[[email protected] ~]$ ls D
Нажмите TAB:
[[email protected] ~]$ ls D
Дополнения не произошло — просто прозвучал звуковой сигнал. Так получилось потому, что символу D соответствует более одного элемента в каталоге. Чтобы командная оболочка дополнила вашу строку, предложенная вами «подсказка» должна иметь однозначное продолжение. Попробуйте продолжить ввод:
[[email protected] ~]$ ls Do
Затем нажмите TAB:
[[email protected] ~]$ ls Documents
Дополнение произошло.
Этот пример демонстрирует дополнение путей как наиболее частый случай использования дополнения. Однако дополнение также работает с именами переменных (когда слово начинается с символа $), именами пользователей (когда слово начинается с символа ~), командами (когда дополняемое слово является первым в командной строке) и сетевыми именами компьютеров (когда слово начинается с символа @). Дополнение сетевых имен компьютеров действует только в отношении имен, перечисленных в /etc/hosts.
С механизмом дополнения связано несколько управляющих комбинаций клавиш (табл. 8.4).
Существует еще несколько команд, смысл которых для меня не совсем ясен. Полный список вы сможете найти на странице справочного руководства (man) для bash, в разделе «READLINE».
Таблица 8.4. Команды дополнения
Клавиша
Действие
ALT+?
Выводит список возможных дополнений. В большинстве систем аналогичный эффект можно получить, нажав клавишу TAB второй раз, что намного проще
ALT+*
Вставит все возможные дополнения. Это пригодится в том случае, если требуется использовать больше одного возможного варианта дополнения
ПРограммируемое дополнениеПоследние версии bash реализуют механизм программируемого дополнения. Программируемое дополнение дает возможность добавлять дополнительные правила. Обычно это делается с целью добавить поддержку определенных приложений. Например, можно добавить дополнение списка параметров команды или файлов определенного типа, поддерживаемых приложением. В Ubuntu определено огромное множество таких правил. Программируемое дополнение реализуется посредством функций командной оболочки — небольших мини-сценариев, о которых будет рассказываться в следующих главах. Если вам любопытно, попробуйте выполнить команду