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