Obtenha o histórico do bash para lembrar apenas os comandos executados com o espaço prefixado!

10

Os comandos executados no terminal prefixado com espaços em branco não são registrados no arquivo de histórico de comandos. Mas existe uma maneira de obter o contrário, ou seja, a história deve registrar apenas aqueles que são prefixados com espaço?

preciso
fonte

Respostas:

12

Você pode reverter as configurações padrão do Ubuntu definindo duas variáveis ​​(HISTIGNORE an HISTCONTROL), use os comandos como abaixo:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsaltera o comportamento do histórico para ignorar apenas linhas duplicadas e não para ignorar linhas que começam com um espaço. (Você também pode definir HISTCONTROL como a sequência vazia (com HISTCONTROL=) se desejar manter duplicatas, mas isso geralmente não é desejado.)

HISTIGNORE='!( *)'faz com que a história ignore todas as linhas que não começam com um espaço: ( *)corresponderiam a todas as linhas começando com um espaço, mas o líder !nega a correspondência, portanto corresponde a tudo que não começa com um espaço. E tudo o que corresponder ao padrão HISTIGNORE será ignorado pela história. (Esta última opção requer que o bash seja executado com extglobativado, com shopt -s extglob, mas essa é a configuração padrão no Ubuntu.)

Se você quiser tornar isso permanente, não esqueça de colocar os dois comandos acima no seu ~/.bashrc.

falcoeiro
fonte
Obrigado, isso é exatamente o que eu queria .. salvo as alterações .bashrc.. Eu precisava disso para impedir festa de gravar cada cds, lsS e outros comandos diários que eu uso; e para aqueles poucos comandos que eu preciso na história, agora eu posso usar o prefixo ..
precisa
1
@rusty Se você deseja excluir apenas alguns comandos triviais, pode ser melhor para você usar algo como HISTIGNORE='ls*:cd*', que fará com que o histórico ignore todas as linhas que começam com lsou cd, você pode estender a lista com outros comandos, basta colocar um :entre os comandos . Mas não esqueça que o recurso de recuperação de comando que você pode acessar pela "tecla de seta para cima" também usa esse histórico; portanto, se você definir algo a ser ignorado, não poderá recuperar esses comandos ignorados com o " seta para cima ".
Falconer
Eu queria ignorar qualquer comando SSH, mas não comandos como ssh-copy-idou ssh-keygen. Em HISTIGNORE, eu incluído " ssh\ *" com os meus outros comandos ignorados. Escapar do caractere de espaço parece ser obrigatório.
User38537
2

" Os comandos executados no terminal prefixado com espaços em branco não são registrados no arquivo de histórico de comandos "

Sim, eles estão.

história terminal

MrVaykadji
fonte
1
é um cenário em bash ;-)
Rinzwind
comando prefixado com spaces.Like em branco `sudo apt-get update`
Avinash Raj
Qual é o valor da sua variável HISTCONTROL?
Glenn Jackman
@AvinashRaj: sim, veja-me comandar "isso não deve ser gravado", coloquei um espaço (visível tanto na linha de comando quanto na história). Portanto, não funciona dessa maneira. Talvez você possa configurá-lo (com HISTCONTROL); mas não é o caso por padrão.
MrVaykadji