Как я могу увидеть историю Bash из нескольких терминальных сессий в Ubuntu? [Дубликат]

11

Возможное дублирование:
можно ли объединить файлы истории в bash?

Я использую Ubuntu Server 9.10, и я хотел бы иметь возможность просматривать историю моего bash для более чем одного сеанса терминала. Т.е. мои последние 200 команд или около того, даже если я вышел из системы между ними.

Когда я использую, historyя просто вижу все команды из моего реального сеанса терминала. Как я могу увидеть больше истории команд из Bash? Есть ли какие-то особые настройки для bash, которые я должен изменить по сравнению со значениями по умолчанию в Ubuntu?

У меня нет ~/.bash_historyфайла. Но у меня есть ~/.bashrcс HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsиHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

ОБНОВЛЕНИЕ: я сейчас пробую Ubuntu Server 10.10 в VirtualBox. Если я просто отключу VirtualBox без команды выключения, то при следующей загрузке команды из последнего сеанса не сохранятся в файле истории.

Команды сохраняются, только если я выключаю машину с помощью команды выключения. Например, отключение -P 0.

Это должно быть причиной моей проблемы. Поэтому я должен выяснить, как чаще сохранять историю команд. Например, после каждой команды.

Jonas
источник
Что вы получаете, если вы делаете echo $HISTSIZEи echo $HISTFILESIZE? У My (Ubuntu) ~/.bashrcесть те же HISTCONTROLстроки, что и у вас, у которых мозг умер, так как второй переопределяет первый, а значения должны быть разделены двоеточиями, а не запятыми. Если вы делаете set -o, это показывает строку, которая говорит "история на"?
Приостановлено до дальнейшего уведомления.
Я получаю 500с echoобеими переменными иhistory on
Джонас
второе утверждение HISTCONTROL - это то, что вы получаете, а не первое. хотя ignoreboth является сокращением bash для ignoredups + ignorespace, так что, вероятно, проблема не в этом.
Квик-кихот
1
это дубликат: superuser.com/questions/37576/…
Уоррен
1
@ Warren: хорошая находка. Я согласен, похоже, что именно то, о чем просит Саной.
шарлатан-кихот

Ответы:

6

Вы можете использовать

history -a

немедленно добавить историю в памяти в файл истории. Одна терминальная сессия не может видеть другую, пока это не будет сделано или другой не завершен.

Вы можете использовать

history 200 | less

чтобы увидеть это количество записей.

Кроме того, чтобы HISTSIZEувидеть запись в справочной странице Bash относительно HISTFILESIZE.

Приостановлено до дальнейшего уведомления.
источник
history -a´ doesn't do anything for me, and not история 200 | less`, но я обновил свой вопрос, добавив больше информации. Спасибо, в любом случае.
Джонас
Я думаю, что нашел причину сейчас. История не сохраняется, пока я не сделаю чистое отключение. Смотрите мой новый вопрос: unix.stackexchange.com/questions/3330/…
Джонас
6

После выхода история добавляется в файл ~/.bash_history. Загляни туда.

По умолчанию он запомнит ваши последние 500 команд. Если вы хотите сохранить больше, установите переменную HISTSIZEв ~/.bashrc.

Я также добавить ignoredupsк HISTCONTROLHISTCONTROL=$HISTCONTROL:ignoredup). Это позволяет дублировать последовательные команды для сохранения только один раз.

Посмотрите на man 1 bashто, что еще вы можете настроиться на историю.

Бенджамин Банье
источник
Спасибо за ваш ответ. Но я никогда не имею ~/bash_historyфайл, и нет HISTSIZEв ~/.bashrcно у меня есть HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsи HISTCONTROL=ignorebothи это Ubuntu Server, если этот вопрос.
Джонас
1
@Snoj Обратите внимание на .в ~/.bash_history. И для HISTSIZEэтого будет просто использоваться значение по умолчанию 500 записей.
Бенджамин Банье
Да, но у меня нет ~/.bash_historyфайла в моей системе. Я раньше ls -aпроверял.
Джонас
@Sanoj Так что, возможно, это не по умолчанию. Имя файла хранится в $HISTFILEпеременной, поэтому echo $HISTFILEскажу вам, где искать.
Бенджамин Банье
echo $HISTFILEдает мне /home/sanoj/.bash_history- странно. Может быть, это не активировано по соображениям безопасности?
Джонас
1

История bash обычно загружается, когда запускается оболочка, и сохраняется при нормальном выходе. Вы можете использовать history -aи history -nдля переопределения этого, но не автоматически, если вы не злоупотребляете $PROMPT_COMMANDили что-то подобное.

Игнасио Васкес-Абрамс
источник
0

Саной, это действительно должно "просто работать"; Я не думаю, что должно быть что-то особенное, что вам нужно сделать, чтобы это сделать. Похоже, что-то мешает нормальному ходу событий.

Я бы посмотрел в / etc / profile, / etc / bashrc (или, возможно, /etc/bash.bashrc в соответствии с некоторыми источниками), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout, чтобы увидеть если есть что-то, что может повлиять на историю (возможно, grep -i histна каждый из вышеуказанных файлов).

... В частности, мне интересно, есть ли в ~ / .bash_logout что-то, что удаляет файл.

В качестве альтернативы, возможно, что-то переопределяет $HOMEпеременную?

Зак Томпсон
источник