Как добавить команду в историю Bash, не выполняя ее?
Время от времени было бы полезно добавить команду непосредственно в историю в Bash, фактически не выполняя ее. Пока что закрытая вещь, которую я нашел, это добавление #
перед ним и ударил возвращение. Есть ли лучшие способы?
5 ответов
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 и американской клавиатурой вы получаете:
- Перейти к началу строки: CTRLA: +1 инструкция, +2 нажатия клавиш
- добавлять
#
(нужен SHIFT): +1 инструкция, +2 нажатие клавиши - Добавление его в историю с помощью 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