como evitar escrever comandos bash falhados para bash_history

2

Estou procurando um comportamento de histórico com nuances que não vi em nenhum lugar.

  1. Durante uma sessão de terminal, desejo que cada comando, independentemente do status de saída, seja anexado ao histórico da memória.
  2. Ao sair da sessão, quando o histórico da memória é gravado no disco em ~/.bash_history , desejo omitir os comandos que falharam.

Espero que o raciocínio seja claro: em uma sessão, um dos usos mais comuns da história é tentar novamente o último comando (com falha), seja com uma edição menor, ou depois de alterar algum fato ambiental na esperança de obter melhores resultados.

Mas, ao mesmo tempo, não quero que meu histórico de longo prazo fique cheio de comandos ruins.

Eu vi este post , que mostra como (1 ) determinar o status de saída do último comando e (2) como remover entradas de histórico por índice.

E eu vi esta resposta , que mostra como usar trap para executar comandos quando uma sessão termina.

(Eu também estudei mega-resposta , que parece cobrir muitas peculiaridades relacionadas à manipulação do histórico, embora eu não saiba ao certo o quanto isso é relevante.

Eu tenho uma idéia aproximada de como eu poderia realizar meu objetivo, mas não sou muito experiente com a programação bash, e estou tendo problemas para ganhar dinheiro. Meu plano:

  • Eu crio um novo arquivo, $TEMP/.bash_history_failures_IDENTIFIER para cada sessão de terminal, substituindo IDENTIFIER por algum tipo de valor específico da sessão (PID?) que garanta que várias sessões não atrapalhem umas às outras
  • usando uma combinação de number=$(history 1) e [ $exit_status -eq 127 ] , escrevo o índice de cada comando incorreto no arquivo de falhas da sessão atual
  • usando o gancho trap para executar o código na saída, eu invoco uma função que percorre os índices no arquivo de falhas da sessão, fazendo history -d $number em cada entrada
  • finalmente, deixo que os restos do histórico na memória (que devem ser todos e apenas comandos bem-sucedidos) sejam gravados em ~/.bash_history de acordo com o que for meu HISTCONTROL settings

O que eu estou propondo é possível? O que eu estou negligenciando? Terei problemas para excluir itens do histórico em ordem crescente? O que é uma maneira boa e estável de criar um arquivo exclusivo para cada sessão?

O que eu considero um comando "com falha"?

Eu não quero que o histórico de longo prazo contenha erros de usuário:

  • comandos que não existem
  • erros de sintaxe

Eu quero manter os comandos corretos, mesmo que eles não possam ser executados por algum outro motivo (por exemplo, permissões inadequadas, caminhos de entrada inexistentes).

Os dois exemplos que vêm à mente são que eu constantemente esqueço onde inserir os pontos e vírgulas em frases como esta:

for pkg in $(ls ./packages); do cp ./.eslintrc.yml ./packages/$pkg/; done

Eu não quero que o histórico contenha as entradas onde eu coloco as semis no lugar errado.

O outro caso é que normalmente eu levo várias tentativas para encontrar as opções corretas para cut , e a maioria dos meus erros são erros de sintaxe ao especificar os argumentos para ele.

Eu adoraria se meu histórico bash de longo prazo pudesse omitir as muitas tentativas fracassadas de obter comandos de trabalho corretamente. Não estou preocupado com a história que contém, por exemplo, pesquisas que acontecem para não produzir resultados.

    
por Tom 13.10.2018 / 09:44

0 respostas