Назад | Перейти на главную страницу

Настройте экран GNU так, чтобы он сохранял историю команд в файлах

Я хотел бы настроить экран GNU таким образом, чтобы он хранил истории команд всех разных окон в разных файлах.

Я знаю, что по умолчанию экран GNU вообще не хранит истории команд (своих разных окон) в файле (вместо этого он хранит их в памяти), но можно ли было бы сказать ему вместо этого хранить их в файлах?

У разных файлов истории команд должны быть имена <session>.<window>.history, или похожие.

Кто-нибудь знает, как это сделать?

(Для ясности: я хочу, чтобы каждое экранное окно GNU записывало отдельный файл. Мне нравится, что каждое окно имеет разную историю, и я обычно запускаю разные типы команд в разных окнах.)

Создайте сценарий где-нибудь примерно так.

~ / bin / myshell

#!/bin/bash
HISTFILE=~/.bash_history_w$WINDOW
# HISTFILE=~/.bash_history_w${WINDOW}_s${STY##*.}  # with session name.
export HISTFILE
exec /bin/bash

Отрегулируйте свой .screenrc с помощью такой строки.

shell ~/bin/myshell

Спасибо, но есть проблема: кажется, что файлы на самом деле не записываются, пока я не закрою окно. Однако в моем случае окна всегда будут активны и никогда не закроются. Как я могу сделать так, чтобы файлы записывались, не закрывая окна?

Вы можете вручную принудительно записать, выполнив команду history -w. Я не верю, что есть способ, чтобы bash автоматически фиксировал историю, кроме как при выходе. Кажется, есть возможность сделать это в zsh тем не менее, ищите INC_APPEND_HISTORY.

Если вам нужен журнал того, что было сделано за сеанс, вы можете использовать сценарий для этого. Если вы хотите использовать сценарий для создания журнала сеанса + окна под сценарием, вы можете настроить myshell следующим образом.

#!/bin/bash
SHELL=/bin/bash  # reset the shell back to bash since screen -s will adjust to to myshell
export SHELL
script -a  -q -f ~/.sessionlog_w${WINDOW}_s${STY##*.}

История Shell и screen история - это разные вещи. Оболочка запоминает команды, которые вы вводите, пока screen запоминает все: команды, которые вы вводите и их вывод (даже подсказка).

Если вы хотите сохранить историю от screen тогда вы можете использовать его функцию ведения журнала. В конце вашего ~/.screenrc добавьте эти команды:

screen
screen $SHELL -c 'screen -X logfile "/tmp/$STY.%n.history"; screen -p 0 -X deflog on; screen -p 0 -X log on'