Я хотел бы настроить экран 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'