Vendo os comandos reais digitados no histórico bash

0

É possível recuperar os comandos reais digitados em um histórico bash? Se o comando envolver (por exemplo) uma substituição ou modificador de histórico, o que é visto no histórico é o comando resultante, e não o comando digitado.

Alguns exemplos. Para ambos, suponha que o comando 123 no histórico seja ls Red*

  1. Se eu digitar !123 para usar a linha de comando 123 do histórico, e agora olhar o último comando do meu histórico, verei ls Red* em vez de !123 .

  2. Se você usar o comando shell interno fc -s Red=Blue 123 e examinar o histórico, veremos ls Blue* em vez de fc -s Red=Blue 123

Da mesma forma, se eu usar a seta para cima (produzindo a seqüência de escape ^[[A ), recebo o comando expandido em vez do texto digitado real.

Em todos esses exemplos, a entrada resultante no histórico é o que eu espero, mas, em alguns casos, seria útil recuperar o texto originalmente digitado. Por exemplo, embora os exemplos acima sejam bastante simples, talvez eu esteja usando uma substituição complexa que desejo editar.

Sei que isso seria mais complicado depois que o shell for inicializado, pois HISTFILE não contém essa informação. Não estou preocupado em recuperar o texto original neste caso (embora seja interessante).

    
por borrible 22.07.2016 / 14:01

1 resposta

1

A resposta real à pergunta que você fez é "Não, o bash não tem um recurso como esse". Era algo que eu pensava há uma década atrás quando eu estava trabalhando no mesmo prédio que o núcleo da equipe GNU, e então eu fui e falei com eles e, aparentemente, adicionando isso seria um PITA (incluindo descobrir a sintaxe e armazenar todos essa história extra). Muitas pessoas ocasionalmente se beneficiariam, mas havia muitos problemas maiores a serem resolvidos, então era improvável que isso fosse corrigido.

Por outro lado, muitas vezes descobri que usar os recursos de recortar e colar do X11 pode atender às minhas necessidades reais em quase todos os casos. Fica ainda melhor com a descoberta do seguinte bit de XResource magic:

*cutToBeginningOfLine:      False

Se você sabe onde seu XResource s está, então você pode adicionar essa linha a esse arquivo. Se você não conseguir determinar isso, basta adicionar echo '*cutToBeginningOfLine: False'|xrdb -merge a um de seus arquivos de inicialização (por exemplo, .profile , mas depende do seu shell).

O que isto faz é fazer triplo clique no botão esquerdo do mouse copiar a palavra que você está apontando para o final da linha (incluindo o Enter ), e então você pode colá-lo facilmente. Por padrão (ou seja, sem isso), o clique triplo copia a linha inteira, incluindo o prompt.

    
por 24.07.2016 / 11:35