Просто вопрос, чтобы улучшить свои bash
навыки. Я всегда так делаю:
$ history | grep some_long_command
...
...
123 some_long_command1.........
124 some_long_command2.........
...
Затем я могу запустить команду, которую нашел, выполнив:
!123
Однако мне часто хочется это сделать:
some_long_command1foobar
Т.е. измените команду, прежде чем я ее запустил. Можете ли вы использовать bash для запуска этой команды:
#some_long_command1
так что это комментируется.
Тогда мне не нужно использовать мышь, чтобы выделить команду, отредактировать ее, а затем запустить (я могу просто использовать клавиатуру - быстрее).
Полагаю, я мог бы написать сценарий для этого, но, возможно, где-то уже есть встроенная функция ....?
bind Space:magic-space
свой профиль в bash. Затем нажатиеSpace
расширится!123
наsome_long_command1
.Ответы:
Я бы предложил вместо использования команды истории использовать
ctrl+r
и начать вводить эту команду. Когда вы нажимаете клавишу со стрелкой, как если бы собирались его изменить, он перестанет распознаваться автозаполнением и позволит вам редактировать перед запуском.ОБНОВЛЕНИЕ: также, если вы хотите циклически перебирать различные команды, содержащие только что набранную вами строку, продолжайте нажимать
ctrl+r
источник
set -o vi
), вы также можете использовать его/
для поиска в истории и ее редактирования.ctr+r
, начните вводить, затем, когда вы захотите найти все команды, которые это содержат, просто продолжайте нажиматьctrl+r
. Другими словами, то, что вы хотите делать с подъемом / опусканием, выполняется (по круговой системе) сctrl+r
Фактически, вы можете просто добавить
:p
к команде, чтобы распечатать ее, не выполняя ее. Например:Будет распечатана
ls -la
как предыдущая команда, не выполняя ее, и вы можете просто нажать ↑(вверх), чтобы найти и отредактировать.Вы также можете сделать
чтобы распечатать 123-ю команду в качестве предыдущей.
источник
!mycmd:p
. Если в Bash включены команды vi, то ответ Перселла будет таким же хорошим или лучше. Ctrl-r, как упомянул Микель, является следующим лучшим вариантом.Вы также можете попробовать
fc
команду отредактировать команду в истории.WIKI говорит:
Помимо обратного инкрементального поиска ( Ctrl+ R), у нас есть еще несколько горячих клавиш bash :
Откуда
man bash
:источник
Запустит команду 123, заменив строку 'old' на строку 'new'.
источник
Вы можете перейти в режим редактирования, нажав M- ^ (option-shift-6 на Mac).
Введите это:
И вы будете редактировать команду # 123. Это похоже на использование ctrl-r, но с синтаксисом с восклицательным знаком.
источник
M-^
ли привязать к чему-то более удобному для пальцев?Вместо использования
history
команды привяжитеhistory-search-backward
/history-search-forward
к сочетаниям клавиш, которые можно легко запомнить (я предпочитаю PgUp / PgDown). Для этого поместите это в свой.inputrc
файл:"<key code>": history-search-backward "<key code>": history-search-forward
Чтобы получить
<key code>
, введитеCtrl-V <key>
оболочку и замените начало^[
на\e
в любом выводилось.После настройки вы можете просто ввести
some
и нажать PgUp, чтобы получитьsome_long_command
. Если вам нужно,some_long_command with_some_arg
но есть похожая командаsome_long_command with_some_other_arg
позже в истории, вы можете циклически пройти ее, пока не дойдете до нее, набравsome
и затем несколько раз нажав PgUp, или вы можете ввестиsome
, нажать PgUp, переместить курсор туда, где две команды начинают различаться, введите несколько символов и еще раз нажмите PgUp. Эта возможность быстро пролистывать / различать похожие команды, на мой взгляд, делает его гораздо более удобным инструментом, чемCtrl-R
.источник
Вы также можете поставить
shopt -s histverify
в вашем
.bash_profile
, что приводит к тому, что любое расширение истории появляется в вашей командной строке без его запуска, что позволяет редактировать перед этим.источник
Вы можете попробовать «ящик подсказок» - вроде истории https://github.com/dvorka/hstr - он читает историю Bash и позволяет быстро перемещаться.
Чтобы получить последнюю команду, просто введите hh, перейдите к команде и используйте стрелку вправо, чтобы получить ее в командной строке (где вы можете отредактировать ее и / или добавить комментарий).
источник
^ p, чтобы получить последнюю набранную команду в unix / solaris
источник
Положить
псевдоним r = 'fc -s'
в вашем
.bashrc
(домашнем каталоге ), вы можете просто ввестив командной строке, и вы выполните копию последней
<whatever>
команды (те же параметры), которая есть в вашей истории. просто нажмите стрелку вверх, чтобы увидеть, что вы выполнили, если почувствуете необходимость.источник