Здрасти. Если открыть два терминала, в первом ввести команду ls -la, а во втором history, то во втором терминале ты не увидишь в истории команду ls -la.
Хотя сервер один и тот же. И не увидишь ты эту команду в истории, пока не завершишь сессию в первом терминале либо не сделаешь определённый финт ушами. Пиздец неудобно!
Финт ушами в первом терминале:
history -a
history -c
history -r
a = пишем текущую историю сессии в файл
с = очищаем текущую сессию
r = перезагружаем файл истории
Теперь, если перезайти во второй терминал, то увидишь там команду ls -la, то есть история как бы синхронизировалась. Это хорошо, но недостаточно хорошо!
Как это можно автоматизировать?
Добавляем в .bashrc:
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
ignoredups:erasedups
- Команды, вводимые несколько раз, не дублируются в истории.
- Повторная команда заменяет все предыдущие в истории.
shopt -s histappend
Эта команда включает опцию histappend, которая добавляет новые команды в конец файла истории (~/.bash_history) при завершении сессии вместо перезаписи файла. Это позволяет сохранить команды из разных сессий и объединить их в единую историю.
А кишка PROMPT_COMMAND = назначает значение переменной PROMPT_COMMAND, которая используется в bash для выполнения команды перед отображением командной строки (приглашения).
А ещё есть фича:
declare -r PROMPT_COMMAND="echo 'привет осёл'"
После выполнения любой команды на экран будет выводиться «привет осёл». Эту команду можно заменить на любую другую, например триггерить bash-скрипт, который будет отправлять введённые команды сразу тебе в телеграм. Ну или забить exit 1 по приколу.
Ёмко? Ёмко! Изучай!








Комментарии