Розгублена історія


15

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

Відповіді:


11

Це повністю залежить від того, як обирає оболонку для обробки

bashза замовчуванням буде замінено файл історії з локальною історією кожної оболонки під час її виходу, тому остання оболонка для виходу виграє. Цей histappendпараметр призведе до того, що він замість ( shopt -s histappend) додасть до історії історії .

zsh робить те саме за замовчуванням і має декілька варіантів поводження з ним:

  • appendhistory - Історія кожної оболонки додається до основного файла історії, коли оболонка виходить
  • incappendhistory - Файл основної історії оновлюється щоразу, коли рядок виконується в будь-якій оболонці, замість того, щоб чекати, поки ця оболонка не завершиться
  • sharehistory- Like incappendhistory, але також витягує зміни з головного файлу історії у всі запущені оболонки, тому ви можете запустити команду в одній оболонці, а потім натиснути Upв іншу оболонку і побачити її

А тепер розкажіть мені, як це зробити на Bash, будь ласка;)
tante

1
@tante shopt -s histappendНе працює?
Майкл Мрозек

0

Я спочатку отримав цю ідею з книги O'Reilly "Unix Power Tools".

По своєму .profileя встановив:

export HISTFILE=$HOME/.sh_hist.$$

Кожен раз, коли я .profileчитаю, я отримую новий файл історії, названий PID мого сеансу. Якщо у мене декілька входів, кожен логін отримує унікальний файл історії. Працює в kshі bash.

Якщо ви просто відкриваєте нові термінали в сеансі X, вони зазвичай не є оболонками для входу, але ви можете налаштувати їх на функції оболонок для входу. Наприклад, rxvt +lsрозпочнеться rxvtяк оболонка для входу. Перевірте документи, чи не використовується термінал.

Крім того, якщо ви не використовуєте .logoutчи .bash_logoutфайл (чи якийсь інший спосіб) для очищення, з часом у вас з’явиться скачування .sh_histфайлів.


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