Як я можу бачити історію Bash з більш ніж одного термінального сеансу в Ubuntu? [дублікат]


12

Можливий повтор:
Чи можна файли історії уніфікувати в bash?

Я використовую Ubuntu Server 9.10, і я хотів би мати можливість бачити свою історію башів протягом більше ніж один термінальний сеанс. Тобто мої останні 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.

Це має бути причиною моєї проблеми. Тому я повинен з'ясувати, як частіше зберігати історію команд. Напр. Після кожної команди.


Що ви отримуєте, якщо зробите echo $HISTSIZEі echo $HISTFILESIZE? Мій (Ubuntu) ~/.bashrcмає ті ж HISTCONTROLрядки, що і ваш, який є мозком мертвим, оскільки другий переосмислює перший, і значення повинні бути розділені двокрапкою, а не розділені комами. Якщо ви зробите set -oце, чи відображається рядок із написом "історія увімкнено"?
Призупинено до подальшого повідомлення.

Я отримую 500з echoобох змінних іhistory on
Jonas

другий вислів HISTCONTROL - це той, який ви отримуєте, а не перший. хоча ignoreboth - це скорочення скорочення для ignoredups + ignorespace, так що, ймовірно, це не проблема.
шарлатаний кіхот

1
це дублікат: superuser.com/questions/37576/…
warren

1
@warren: приємна знахідка. Я згоден, виглядає саме те, про що просить Саной.
шарлатаний кіхот

Відповіді:


7

Можна використовувати

history -a

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

Можна використовувати

history 200 | less

щоб побачити цю кількість записів.

Окрім того, HISTSIZEпобачити запис на сторінці "Баш людина" стосовно HISTFILESIZE.


history -a´ doesn't do anything for me, and not історія 200 | менше`, але я оновив своє запитання додатковою інформацією. Все одно, дякую.
Йонас

Я думаю, що зараз я знайшов причину. Історія не зберігається, якщо я не виконую чисте відключення. Дивіться моє нове запитання: unix.stackexchange.com/questions/3330/…
Джонас

7

Після виходу історія додається до файлу ~/.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змінну?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.