история bash для текущей сессии


15

Может быть, я что-то упускаю, но есть ли способ получить текущую историю Bash для текущего сеанса, который вы используете, как

если я бегу

ssh host
$ pwd
$ ls
$ cd /tmp

Я просто хочу увидеть эти 3 команды и ничего больше


Вы проверили historyкоманду?
Hackaholic

Да, я знаю о, historyно это не только моя сессия
Майк

Сумма, сохраняемая между сессиями, контролируется переменной оболочки SAVEHIST, если я помню. Таким образом, если количество сохраненной истории в прошлый раз было
равно нулю

@mdpc, какие документы ты читаешь? На странице руководства Bash я не нахожу ссылки на SAVEHIST, а только на HISTSIZEи HISTFILESIZE.
Wildcard

Ответы:


15

Немного окольным путем:

history -a ~/current_history

Это сохранит несохраненную историю bash текущего сеанса ~/current_history, которую вы затем сможете просмотреть.


это может работать, но не обрабатывать несколько сеансов .. Я предполагал, что могу создать случайный временный файл для его сохранения
Майк

1
@ Майк может использовать имя, связанное с PID оболочки, возможно ~/$$_history.
Муру

4
Стоит отметить, что это не очистит историю и никак не повлияет на нормальное сохранение истории! Я не был уверен, пока не проверил это. :)
NHDaly

Я нахожу более удобным, просто сделав history -aэто, выбросив его вместе с предыдущей историей в ~ / .bash_history ... что может быть проблемой, если ваша история длиннее, чем отсечка, которая равна 1000 в моих системах centos7 и fedora 24.
Рэй Фосс

0

У меня была проблема, что я хотел записать текущий historyв файл, но все же хотел, чтобы записи были записаны в основной Bashhistory

Я решил это, просто прикрепив файл с помощью cat:

history -a current-history
cat current-history >> .bash_history

-1

Используется compдля сравнения всей истории (включая текущий сеанс Bash) с уже сохраненной историей в .bash_historyи выводить только те строки, которые являются уникальными для текущего сеанса - в которых должны отображаться только те команды, которые были выполнены с момента запуска текущей оболочки Bash

comm -23 <( history | cut -c 8- ) ~/.bash_history

Редактировать: как указала @Wildcard, эта команда работает не для всех дистрибутивов comm. Я проверял это на Mac OS.

Вариант той же идеи с использованием diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'

Хорошая мысль, но очень ненадежная в моих тестах. commпредполагает отсортированный ввод. Но добро пожаловать в Stack Exchange! :)
Wildcard

@Wildcard, commв моем примере выше обе стороны ввода отсортированы по своей сути. Вы управляли этим? И это не произвело вашу текущую историю сессии Bash?
Кристиан Каднер

Да, я сделал, и нет, это не так. И нет, содержимое ~/.bash_historyбудет не отсортирован; и при этом выходные данные historyсортируются вообще после удаления номеров первых строк. (Кроме того, commожидается лексикографически отсортированный ввод, а не числовой.)
Подстановочный

Правильно, я имел в виду, что оба аргумента commкоманды в моем примере расположены в одном и том же порядке, а не в том, что они отсортированы лексикографически. Версия FreeBSD commне требует лексикографически отсортированного ввода
Кристиан Каднер

Я использую Mac OS X. Это не имеет к этому никакого отношения. Если присмотреться поближе, то, похоже, это ранние команды из истории в памяти, которые с тех пор были перезаписаны в файле истории при выходе из других оболочек.
Wildcard
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.