Configure a tela GNU para que armazene históricos de comandos em arquivos

3

Eu gostaria de configurar a tela GNU de modo que ela armazene os históricos de comandos de todas as janelas diferentes em arquivos diferentes.

Eu sei que por padrão a tela GNU não armazena os históricos de comandos (de suas janelas diferentes) em um arquivo (armazena-os na memória), mas pode ser possível dizer para armazená-los em arquivos?

Os diferentes arquivos do histórico de comandos devem ter os nomes <session>.<window>.history ou similar.

Alguém tem uma ideia de como fazer isso?

(Para ficar claro, eu quero que cada janela de tela GNU escreva um arquivo diferente. Eu gosto que cada janela tenha um histórico diferente, e eu normalmente executo diferentes tipos de comandos nas diferentes janelas.)

    
por user9474 06.01.2011 / 23:27

2 respostas

5

Crie um script em algum lugar assim.

~ / bin / myshell

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

Ajuste seu .screenrc com uma linha como esta.

shell ~/bin/myshell

Thanks, but there is a problem: It seems the files don't actually get written until I close a window. In my case though, the windows will always be active and never closed. How can I trigger that the files get written without closing the windows?

Você pode forçar manualmente uma gravação executando o comando history -w . Eu não acredito que haja qualquer maneira de fazer com que o bash automaticamente confirme o histórico, exceto na saída. Parece haver uma opção para fazer isso em zsh , mas procure por INC_APPEND_HISTORY.

Se você quiser um registro do que foi feito por sessão, você pode usar o script para isso. Se você quisesse usar o script para criar uma sessão + registro de janelas sob script, você poderia ajustar o myshell desta forma.

#!/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##*.}
    
por 06.01.2011 / 23:49
1

O histórico da shell e a história screen são duas coisas diferentes. Um shell lembra de comandos que você digita enquanto screen lembra de tudo: comandos que você digita e sua saída (até mesmo o prompt).

Se você quiser manter o histórico de screen , poderá usar o recurso de registro. No final do seu ~/.screenrc , adicione estes comandos:

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