Как добавить команду в историю Bash, не выполняя ее?

Время от времени было бы полезно добавить команду непосредственно в историю в Bash, фактически не выполняя ее. Пока что закрытая вещь, которую я нашел, это добавление # перед ним и ударил возвращение. Есть ли лучшие способы?

5 ответов

Решение

history -s команда

history -s команда

Вы можете даже связать нажатие клавиши, чтобы сделать это для вас. Вы можете ввести это в командной строке Bash:

bind '"\C-q": "\C-a history -s \C-j"'

или добавьте это к вашему ~/.inputrc:

"\C-q": "\C-a history -s \C-j"

затем вы можете что-то набрать и нажать Ctrl-q, и это будет добавлено в историю без выполнения. Пробел перед "историей" вызывает history сама команда не будет добавлена ​​в историю, если ваш HISTCONTROL переменная содержит ignorespace или же ignoreboth, Вместо "\Cq" можно выбрать другое нажатие клавиши.

Трудно придумать что-то более короткое, чем "команда" из одного символа, поэтому нам действительно нужно перейти на уровень нажатия клавиш. С моей настройкой bash и американской клавиатурой вы получаете:

  1. Перейти к началу строки: CTRLA: +1 инструкция, +2 нажатия клавиш
  2. добавлять # (нужен SHIFT): +1 инструкция, +2 нажатие клавиши
  3. Добавление его в историю с помощью ENTER: +1 инструкция, +1 нажатие клавиши

итого 3 инструкции, 5 нажатий клавиш.

Использование ALT# делает то же самое в 1 инструкции, 2 нажатиях клавиш.

YMMV в зависимости от вашей раскладки клавиатуры и конфигурации bash.

Иногда бывает полезно добавить команду даже из подпроцесса (что приводит к потере текущей команды):

      echo "the command" >> ~/.bash_history

Чтобы использовать ответ @Spiff, вы можете поместить в историю результаты команды, а не только саму команду. Например, мне часто нравится отметка даты и времени в списке истории:

      > alias dts='history -s $(echo -n "### "; date)'
> dts
> history
...
45 ### Fri Sep 29 08:26:52 PM UTC 2023
Другие вопросы по тегам