Чи можу я легко шукати свою історію в багатьох вікнах екрана?


11

У моєму screenсеансі 12 відкритих вікон. Він працює тижнями ... Я знаю, що я виконав convertкоманду ImageMagick в одному з цих 12-ти віконних екранів десь минулого тижня ... чи є якийсь спосіб я легко шукати історію Bash усіх 12 екземплярів, не закриваючи їх і не запускаючи history | grep convertу всіх 12 екранах?


1
Я використовую ЗШ і я setopt share_historyв /etc/zsh/zshrcтому цієї проблеми ніколи не станеться зі мною: P
phunehehe

Відповіді:


18

Ви можете працювати history -a; history -cу всіх вікнах, щоб зберегти історію. А потім history -rоновити його.

Щоб вирішити цю проблему більш постійно, додайте це до свого .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
Це чудово, дякую! Єдина проблема полягає в тому, що якщо ви введете щось в одну оболонку, а потім перейдете в іншу і введіть історію негайно, вона не з’явиться в історії. Це тому, що PROMPT_COMMAND ще не виконано, тому оновлення не відбулося. Вам доведеться спочатку натиснути return у другому вікні (або виконати іншу команду), а потім ввести історію.
Javid Jamae

1

Звучить важко. Ось пара методів, які можуть працювати для вас.

Якщо у вас встановлені інструменти обліку процесів (в Linux, шукайте пакет з назвою acct) та дозвіл на їх використання, ви можете дізнатися, коли і, можливо, на якому терміналі ви працювали convert:

lastcomm convert

Якщо це недоступно чи не переконливо, ви можете виконати historyкоманду в кожному екземплярі bash, щоб шукати convertкоманди. Це знайде команди, які були у файлі історії при запуску bash.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)повторює номери вікон екрану. Не забудьте пропустити вікна, які наразі не виконують bash, але якийсь інший процес, який інтерпретуватиме вхід по-різному.
  • screen -p $w stuff …передає наступний рядок як вхід у вказане вікно. Вам потрібен новий рядок в кінці рядка.
  • Файл /tmp/convert.historyбуде містити перелік таких рядків, як 3 convert foo.jpg, якщо ви бігли convert foo.jpgу вікні 3.

1
На жаль, це не спрацювало. :-( Я щойно закінчився запуском history | grep convertу всіх вікнах. Я розчарований, хотів прийняти ще одну чудову відповідь Гілла!
Джош

1

tcsh дозволяє обмінюватися історією між сеансами, використовуючи періодичний псевдонім.

У вашому .cshrc (або .tcshrc) файлі:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Це автоматично виконує команду історії кожні 60 хвилин. Це збереже історію у загальному файлі історії у вашому домашньому каталозі. Щоб частіше оновлювати історію, або зменшіть номер періоду, або просто виконайте команду "періодичний", щоб оновити оновлення вручну


0

Bash пише історію лише тоді, коли вона виходить, що робить цю проблему в кращому випадку. Я чув, що zsh може ділитися історією між активними сеансами.

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