Quero executar alguns comandos, mas não quero armazená-los no histórico de comandos. Para que ninguém possa procurá-lo no .bash_history
arquivo.
Existe alguma maneira de executar comandos bash dessa maneira?
Quero executar alguns comandos, mas não quero armazená-los no histórico de comandos. Para que ninguém possa procurá-lo no .bash_history
arquivo.
Existe alguma maneira de executar comandos bash dessa maneira?
Respostas:
Inicie seu comando com um espaço e ele não será incluído no histórico.
Esteja ciente de que isso exige que a variável de ambiente $HISTCONTROL
seja definida.
Verifique se o seguinte comando retorna ignorespace
ou
ignoreboth
#> echo $HISTCONTROL
Para adicionar a variável de ambiente, se estiver ausente, a seguinte linha pode ser adicionada ao perfil do bash. Por exemplo%HOME/.bashrc
export HISTCONTROL=ignorespace
Depois de buscar o perfil novamente, comandos com prefixo de espaço não serão gravados em $HISTFILE
Em qualquer sessão do Bash, defina o arquivo de histórico como / dev / null digitando:
export HISTFILE=/dev/null
Observe que, conforme indicado nos comentários, isso não gravará nenhum comando nessa sessão no histórico!
Só não mexa no trabalho duro do administrador do sistema, por favor;)
A solução do Doodad é mais elegante. Simplesmente desmarque a variável: unset HISTFILE
(obrigado!)
/dev/null
permissões definidas para 0600 no logout. Em vez disso eu usei unset HISTFILE
.
Uma extensão da resposta de @John Doe & @ user3270492. Mas, isso parece funcionar para mim.
<your_secret_command>; history -d $((HISTCMD-1))
Você não deve ver a entrada do comando no seu histórico.
Aqui está a explicação ..
O 'history -d' exclui a entrada mencionada do histórico.
O HISTCMD armazena o número do comando daquele a ser executado a seguir. Portanto, (HISTCMD-1) refere-se ao último comando executado.
Remova uma determinada linha do arquivo de histórico do Bash
Você pode considerar usar um shell sem histórico, como talvez
/bin/sh << END
your commands without history
END
(talvez /bin/dash
ou /bin/sash
possa ser mais apropriado que /bin/sh
)
ou melhor ainda, use o utilitário de lote , por exemplo
batch << EOB
your commands
EOB
A história conteria então sh
ou batch
que não é muito significativa
Você pode iniciar sua sessão com
export HISTFILE=/dev/null ;history -d $(history 1)
então prossiga com suas ações sorrateiras. Configurando o arquivo histórico para/dev/null
arquivo histórico será registrada no arquivo de histórico, mas essa entrada será prontamente excluída e nenhum vestígio (pelo menos no arquivo de histórico) será mostrado.
Além disso, isso não é permanente.
Como mencionado por Doodad nos comentários , unset HISTFILE
isso é muito bom, mas se você também quiser excluir algum histórico, faça echo $HISTFILE
para obter o local do arquivo de histórico (geralmente ~/.bash_history
) unset HISTFILE
e edite ~/.bash_history
(ou o que quer que HISTFILE
fosse - é claro que agora é unset
para que você possa " não leia).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Então você editou seu histórico e o fato de editá-lo!
unset HISTFILE; echo TEST; history
fornecerá o comando echo TEST
como anterior ao último. Embora após o término da sessão e a conexão novamente, o histórico não possua essa entrada. Então, eu diria que funciona :)
unset HISTFILE
não parece impedir que os comandos sejam gravados no histórico da memória, mas impede que eles sejam gravados em qualquer arquivo $ HISTFILE. Acho que você ainda tem seu histórico local na memória, mas ele não está mais sendo gravado em um arquivo, e é isso que você pode querer! ;)
Você também pode usar o seguinte comando:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Eu acho que é um comando muito portátil.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
E agora você pode fazê-lo algo como isto:mysql -uroot -pSecretPassword ; forget
$s
e outras coisas no sed. function forget() { // put code here // }
Se você estiver usando o zsh, poderá executar:
setopt histignorespace
Depois que isso for definido, cada comando começando com um espaço será excluído do histórico.
Você pode usar aliases em .zshrc
transformar esta on / off :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Existem várias maneiras de conseguir isso. Isso define o tamanho do arquivo de histórico como 0:
export HISTFILESIZE=0
Isso define o arquivo de histórico para /dev/null
desativá-lo efetivamente:
export HISTFILE=/dev/null
Para comandos individuais, você pode prefixar o comando com um espaço e ele não será salvo no arquivo de histórico. Observe que isso requer que você tenha o ignorespace
valor incluído na $HISTCONTROL
variável de ambiente (man bash e procure ignorespace
por mais detalhes).
Você só precisa executar:
$ set +o history
Para ver mais, execute:
$ man set
set -x history
depois, ele funcionará.
Este comando pode ser útil. Isso não registrará o comando que é executado
history -d $((HISTCMD-1)) && <Your Command Here>