Вы должны прочитать man bash в вашей системе, особенно раздел Readline, так как это интерактивный механизм ввода bash. В руководстве по Bash на gnu.org есть хороший раздел по редактированию командной строки , который поможет заполнить некоторые пробелы.
По умолчанию вы можете использовать их для перемещения по командной строке (просто перечислите несколько здесь; см. Ссылку для полного списка):
- Ctrl+a перемещает в начало строки (или Home в зависимости от настроек терминала)
- Ctrl+e перемещается в конец строки (или End ...)
- Meta+f продвигает "слово"
- Meta+b движется назад на "слово"
Вы можете использовать их, чтобы "убить" (или "вырезать") текст из строки:
- Ctrl+k убивает ("режет") текст с текущей позиции курсора до конца строки
- Ctrl+y возвращает ("вставляет") последний убитый текст обратно в буфер по курсору
Таким образом, вы можете объединить их, чтобы выбрать кусок какой-то командной строки, которую вы хотите повторить, убить ее, а затем вставить в конец следующей команды.
Теперь, чтобы сделать его еще более увлекательным, давайте рассмотрим расширение истории bash. Это то !!
ответ того Студера упоминает. Расширение истории разбивается на указатели событий, обозначения слов и модификаторы.
Обозначения событий выглядят следующим образом (снова см. Ссылки для полного списка):
!
- начинается подмена истории
!n
- n-я команда в списке истории bash, для некоторого целого числа n (работает и для негативов)
!!
- предыдущая команда; эквивалентно !-1
!string
- самая последняя команда, начинающаяся со строки
Обозначения слов выбирают определенные части из события. Использование :
для отделения события от обозначения слова. Слова нумеруются от 0, начиная с начала строки, и вставляются в текущую строку, разделенные пробелами.
$
- обозначает последний аргумент (например, !!:$
- последний аргумент последней команды; может быть сокращен до !$
)
n
- обозначает n-е слово (например !str:2
является вторым аргументом самой последней команды, начинающейся с str ; !!:0
это команда последней команды)
Итак, для продолжения вашего примера, если ваша последняя команда mkdir /some/really/long/path
, просто выполняется !!
снова запустит эту команду. Но вы хотите , чтобы cd
в этот путь вместо:
$ cd !$
Теперь предположим, что вы выполняете некоторые другие команды, а затем хотите снова вернуться к этому пути. Если это была последняя команда mkdir, которую вы выполнили, вы можете использовать это, чтобы повторить этот путь:
$ tar czf ~/foo.tgz !mkdir:$