Aqui está uma solução incompleta. Eu acho que poderia ser feito para trabalhar, mais ou menos.
Primeiro, organizamos a captura de todas as saídas do teclado, executando dentro de um ambiente script
. (Há muitos problemas com isso; veja abaixo.) Precisamos passar o -f
flag para script
para que ele libere a saída imediatamente para o arquivo typescript. Também escolhemos um nome de arquivo em /tmp
:
script -f /tmp/typescript
Dentro do ambiente de script, nós definimos um atalho de teclado para extrair a última linha do arquivo typescript e empurrá-lo para o histórico: (liguei os comandos a Ctl + y Ctl + y supondo que você não o digita com muita frequência.Um bug no bash evita que você vincule comandos a sequências com mais de dois bytes e isso elimina todas as chaves Fn
, por exemplo. p>
bind -x '"\C-y\C-y":history -s $(tail -n2 X|head -n1)'
Agora, para inserir a última linha de saída na linha de comando atual, "precisamos" digitar ctl-y ctl-y ! ! esc ^
, que copia a última linha de saída para o histórico, depois insere uma expansão de histórico e aciona a expansão do histórico. . Há provavelmente uma maneira melhor de fazer isso, mas esse tipo de trabalho. É um monte de keypresses, por isso, atribuímos a uma macro de teclado:
bind '"\eOP":"\C-y\C-y!!\e^"'
Até certo ponto, isso funciona. No entanto, agora precisamos lidar com a fealdade de script
, que salva a saída precisamente como foi gerada , códigos de controle VT-102 e tudo. Ele salva o que você digitou, exatamente como você digitou, incluindo todos os erros que você retrocedeu, os backspaces e os novos caracteres. Ele salva o retorno de carro ( ctl-m
) que é enviado no final de cada linha. Resumindo, não é realmente um texto que você gostaria de inserir em uma linha de comando.
Conceitualmente, funciona. Tudo o que é necessário é uma ferramenta melhor para salvar a saída da sessão e, talvez, uma maneira mais elegante de inserir o resultado da chamada de um comando shell do que empurrá-lo para o histórico e depois recuperá-lo novamente.