Esta pergunta provavelmente deve ser movida para o ServerFault, pois não é "programação", mas "administrador do servidor" - mas obrigado pela pergunta / resposta, exatamente o que eu precisava!
Andrew Theken
Respostas:
294
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 $HISTCONTROLseja definida.
Verifique se o seguinte comando retorna ignorespaceou
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
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.
Isso já foi respondido várias vezes. O que você diria que sua resposta adiciona a esse tópico (exceto ruídos inúteis)?
Gnicf_gniourf
Não foi reunido em uma resposta , para não ter o próprio comando aparecendo na história e não aparecer nada que seja digitado posteriormente.
Christian
1
Mas agora esta discussão é uma verdadeira bagunça! neste caso, especialmente para uma pergunta tão velho, eu acredito que é melhor que você editar já existente boas respostas, e / ou deixar um comentário ...
gniourf_gniourf
5
Como mencionado por Doodad nos comentários , unset HISTFILEisso é muito bom, mas se você também quiser excluir algum histórico, faça echo $HISTFILEpara obter o local do arquivo de histórico (geralmente ~/.bash_history) unset HISTFILEe edite ~/.bash_history(ou o que quer que HISTFILEfosse - é claro que agora é unsetpara 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!
Tentei isso em: GNU bash, versão 3.2.57 (1) -release (x86_64-apple-darwin15) e não funciona. Os comandos I utilizados após HISTÓRIA unset foram armazenadas em ~ / .bash_history
Krystian
@ Krystian Meu erro - eu escrevi "HISTORY desabilitado" quando deveria ser "HISTFILE desabilitado" - corrigido. Isso funciona agora? Funciona no GNU bash, versão 4.3.30 (1) -release (x86_64-pc-linux-gnu).
Drkvogel 02/03
bem, eu não tenho certeza. Teste simples: unset HISTFILE; echo TEST; historyfornecerá o comando echo TESTcomo 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 :)
Krystian
unset HISTFILEnã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! ;)
drkvogel 03/03
4
Você também pode usar o seguinte comando:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Criei alias esta: 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
sobi3ch
1
Desculpe, mas eu sei que você precisa criar uma função em vez de um alias, pois as aspas alteram o significado de $se outras coisas no sed. function forget() { // put code here // }
sobi3ch
3
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 .zshrctransformar 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."'
Bom, mas esta questão é especificamente marcado festa
tripleee
2
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/nulldesativá-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 ignorespacevalor incluído na $HISTCONTROLvariável de ambiente (man bash e procure ignorespacepor mais detalhes).
Isso desativa o histórico para todos os comandos futuros, não para um comando individual. A maioria das pessoas que vem aqui deve procurar a resposta aceita.
Tripleee
Isso é válido ou está bom, mas incompleto. Enquanto adicionarmos o comando reverso set -x historydepois, ele funcionará.
Abdillah 23/04
0
Este comando pode ser útil. Isso não registrará o comando que é executado
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
ouignoreboth
Para adicionar a variável de ambiente, se estiver ausente, a seguinte linha pode ser adicionada ao perfil do bash. Por exemplo
%HOME/.bashrc
Depois de buscar o perfil novamente, comandos com prefixo de espaço não serão gravados em
$HISTFILE
fonte
Em qualquer sessão do Bash, defina o arquivo de histórico como / dev / null digitando:
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!)fonte
/dev/null
permissões definidas para 0600 no logout. Em vez disso eu useiunset HISTFILE
.fonte
Uma extensão da resposta de @John Doe & @ user3270492. Mas, isso parece funcionar para mim.
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
fonte
Você pode considerar usar um shell sem histórico, como talvez
(talvez
/bin/dash
ou/bin/sash
possa ser mais apropriado que/bin/sh
)ou melhor ainda, use o utilitário de lote , por exemplo
A história conteria então
sh
oubatch
que não é muito significativafonte
Você pode iniciar sua sessão com
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.
fonte
Como mencionado por Doodad nos comentários ,
unset HISTFILE
isso é muito bom, mas se você também quiser excluir algum histórico, façaecho $HISTFILE
para obter o local do arquivo de histórico (geralmente~/.bash_history
)unset HISTFILE
e edite~/.bash_history
(ou o que quer queHISTFILE
fosse - é claro que agora éunset
para que você possa " não leia).Então você editou seu histórico e o fato de editá-lo!
fonte
unset HISTFILE; echo TEST; history
fornecerá o comandoecho 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:
Eu acho que é um comando muito portátil.
fonte
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:
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 :fonte
Existem várias maneiras de conseguir isso. Isso define o tamanho do arquivo de histórico como 0:
Isso define o arquivo de histórico para
/dev/null
desativá-lo efetivamente: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 procureignorespace
por mais detalhes).fonte
Isso é útil se você deseja apagar toda a história, incluindo o fato de ter apagado toda a história!
fonte
Você só precisa executar:
$ set +o history
Para ver mais, execute:
$ man set
fonte
set -x history
depois, ele funcionará.Este comando pode ser útil. Isso não registrará o comando que é executado
fonte