Вопрос или проблема
Может быть, я что-то упускаю, но есть ли способ получить текущую историю bash для сессии, которую вы используете, например
если я выполняю
ssh host
$ pwd
$ ls
$ cd /tmp
Я просто хочу увидеть эти 3 команды и ничего больше
Немного обходной путь:
history -a ~/current_history
Это сохранит несохраненную историю bash текущей сессии в ~/current_history
, которую вы затем сможете просмотреть.
У меня была проблема, что я хотел записать текущую history
в файл, но все же хотел, чтобы записи заносились в основную history
bash
Я решил это, просто присоединив файл с помощью cat
:
history -a current-history
cat current-history >> .bash_history
Используйте history -a
с именем файла. Это может быть файл устройства, как /dev/stdout
.
Тогда вы можете направить это, как вам угодно. Например, чтобы просмотреть историю текущей сессии в less
, вы можете
history -a /dev/stdout | less
Используйте 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'
Попробуйте добавить это в ваш .bashrc
файл
alias currenthistory="history|tac|sed '/exit/q'|tac"
затем выполните
currenthistory
когда вы хотите увидеть историю текущей сессии.
Это ищет последний раз, когда вы выполнили команду exit
, и затем показывает все команды, выполненные после этого. Это работает, сначала переворачивая список истории, затем находя все команды до exit
, затем он развертывает его обратно.
Этот метод не работает, если у вас есть какая-либо другая команда, содержащая “exit” (поэтому вы хотите добавить это как псевдоним в .bashrc
, чтобы он не совпадал с самим собой) или вы используете Control+D для завершения сессий.
.
Ответ или решение
Вопрос об отображении истории bash для текущей сессии может быть решён различными методами. Ниже приведены несколько подходов, которые помогут вам эффективно отобразить именно те команды, которые были выполнены в текущей сессии, используя Bash.
1. Использование команды history -a
Вы можете воспользоваться командой history -a
, чтобы записать историю вашей текущей сессии в отдельный файл и затем его просмотреть. Например:
history -a ~/current_history
Это сохранит историю в файл ~/current_history
, который потом можно открыть любым текстовым редактором.
2. Просмотр с помощью less
С помощью команды history -a
можно записать историю на устройство вывода, как /dev/stdout
, и затем просмотреть её при помощи утилиты less
:
history -a /dev/stdout | less
3. Сравнение с .bash_history
Чтобы вывести только команды текущей сессии, которые еще не записаны в .bash_history
, можно использовать команды comm
и diff
. Вот пример с использованием comm
:
comm -23 <(history | cut -c 8-) ~/.bash_history
Однако эта команда может не работать на всех системах одинаково. Альтернативно, с помощью команды diff
:
diff <(history | cut -c 8-) ~/.bash_history | sed -n 's/^< //pg'
4. Использование псевдонима в .bashrc
Вы также можете настроить псевдоним для отображения истории текущей сессии. Добавьте в файл .bashrc
следующее:
alias currenthistory="history|tac|sed '/exit/q'|tac"
Затем, запустив команду currenthistory
, можно будет увидеть всю историю команд, начиная с последнего завершения сессии командой exit
.
Заключение
Выбор подхода зависит от ваших специфических нужд и предпочтений. Все перечисленные методы позволяют достичь одного результата: отобразить историю команд текущей сессии Bash. Оптимизация данных практик позволит вам улучшить управление вашими сессиями и упростить рабочий процесс. Помните, что регулярное обновление знаний и навыков в IT помогает оставаться на шаг впереди в быстро развивающемся мире технологий.