При условии, что histappend не установлен и никакие игры не запускаются с PROMPT_COMMAND , история команда может:
-a Append the ``new'' history lines (history lines entered since the beginning of the current bash session) to the history file.
Если мы хотим оставить наш реальный файл истории невредимым, мы можем сделать:
$ cat .bash_history #1482030925 ls #1482030926 date #1482030928 free $ echo "one more command" one more command $ echo "another command" another command $ HISTFILE=foo history -a $ cat foo #1482031879 cat .bash_history #1482031887 echo "one more command" #1482031892 echo "another command" #1482031899 HISTFILE=foo history -a
Предыдущие команды из более ранних сеансов (ls, date, free) не отображаются в наш «новый» файл истории, foo
- я надеюсь, что этот пример подтверждает эту мысль.
Другой подход - сохранить текущий файл истории (в начале сеанса входа в систему!), А затем добавить историю текущего сеанса в файл истории (либо выполнив команду «history -a», либо выйдя из системы) и затем сравните оба файла:
$ history > hist.backup $ echo "a new command" a new command $ echo "one more command" one more command $ history > hist.current $ diff hist.{backup,current} 4a5,7 > 5 2016-12-17 19:38:57 echo "a new command" > 6 2016-12-17 19:39:01 echo "one more command" > 7 2016-12-17 19:39:07 history > hist.current
Примечание: я большой поклонник установки HISTTIMEFORMAT = '% F% T'
(введено в bash 3, IIRC), метки времени помогают много, чтобы узнать, когда была выполнена команда.
Используйте comp
для сравнения всей истории (включая текущий сеанс Bash) с уже сохраненной историей в .bash_history
и распечатайте только те строки, которые уникальны для текущего сеанса - - который должен отображать только те команды, которые были выполнены с момента запуска текущей оболочки Bash
comm -23 <( history | cut -c 8- ) ~/.bash_history