Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 10:

Командные процессоры

< Лекция 9 || Лекция 10: 123456789

Средства редактирования командной строки

Редактировать командную строку приходится для того, чтобы исправить что-то в только что набранной строке. В sh нельзя передвинуть курсор в любую позицию в строке, в остальных командных процессорах - можно. Удобнее всего редактировать командную строку в bash.

В каждом командном процессоре реализована возможность стирания последнего символа клавишей "backspace" и стирания строки целиком комбинацией клавиш "Ctrl-U".

В самых первых реализациях командных процессоров средства редактирования были еще более примитивными (например, удаление всей строки целиком выполнялось вводом @ и последующим вводом строки заново, при этом все набранные символы все равно оставались на экране). Сейчас такие архаические приемы редактирования не применяются ни в одном командном процессоре.

В bash и tcsh можно перемещаться вперед и назад по уже введенным символам в строке с помощью "стрелок", переместить курсор в середину и в начало строки. Командный процессор bash после нажатия Enter принимает всю строку целиком, независимо от того, в какой позиции строки находился курсор при нажатии Enter. Например, можно вернуть курсор к середине строки, если ввод оказался неверным, исправить ошибку и тут же нажать Enter, чтобы запустить команду на выполнение. В некоторых старых версиях командных процессоров в этом случае следует исправить строку, перейти к ее концу для ввода команды и только после этого нажать Enter.

В ksh редактирование по умолчанию выключено, его надо включить нажанием клавиши Esc. После этого командная строка будет редактироваться средствами того редактора, имя которого задано в переменной среды окружения VISUAL или EDITOR. По умолчанию это редактор vi. Трудно найти такого системного администратора, которому такой громоздкий и неудобный способ исправления команд покажется удачным: ведь ко всему прочему ему придется помнить о переключении режимов редактирования строки ввода!

В csh и tcsh редактирование командной строки выполняется так же, как и в bash.

Повторение и модификация ранее введенных команд

Иногда бывает удобно повторить команду, которую вы недавно уже вводили; особенно это помогает при вводе длинных команд с одинаковыми аргументами. В тех случаях, когда повторяемая команда должна немного отличаться от оригинала, следует модифицировать запись о ранее введенной команде и запустить на выполнение свежий вариант.

Например, введя

lyxn -p proxy.spb.edu:3128 www.macropulos.cam.ac.uk

вы получите в ответ "command not found", потому что, собираясь запустить lynx, вы допустили опечатку в имени программы. Не повторять же теперь ввод всей длинной строки! Если бы опечатка была в конце строки, можно было бы вызвать строку с предыдущей командой клавишей "стрелка вверх", но здесь опечатка в начале строки, и после вызова выполненной строчки придется еще двигать курсор в ее начало. Есть более короткий вариант, доступный в csh, tcsh и bash:

^xn^nx

Эта конструкция требует у командного процессора повторить предыдущую команду, заменив первой вхождение подстроки xn на nx. И это все!

В csh, tcsh, bash есть и другие средства модификации командной строки. Они перечислены ниже:

  • !n ( n - число) повтор n-ной команды из истории команд1Список (историю) введенных команд можно получить по команде history. Используйте tail для просмотра нескольких последних команд: history | tail ;
  • !! повтор последней команды;
  • !str выполнение последней команды, начинающейся на str.

Командные процессоры csh и tcsh по-разному интерпретируют конструкцию !nstr, например, `!67r'. Для csh это - команда номер 67, в конец которой добавляется r перед выполнением, а для tcsh это - последняя начинающаяся на 67r команда. Такой синтаксис введен в tcsh для удобства повторения команд, имена которых начинаются с цифр. Чтобы заставить tcsh вести себя подобно csh, нужно перед числом поставить обратный слэш, экранирующий его специальное значение: `!\6\7r'.

В bash повторение команд выполняется так же, как и в csh. Дополнительно можно использовать клавиши "вверх" и "вниз" для переходов между командами, введенными раньше или позже.

В ksh для повторения команд используют встроенную команду r, а в sh - команду fc, при этом в sh можно вызвать только такую команду, которая была введена в текущем сеансе, потому что sh не ведет файл истории.

< Лекция 9 || Лекция 10: 123456789