Voglio eseguire alcuni comandi ma non voglio salvarli nella cronologia dei comandi. In modo che nessuno sarà in grado di cercarlo nel .bash_history
file.
Esiste un modo per eseguire i comandi bash in questo modo?
Voglio eseguire alcuni comandi ma non voglio salvarli nella cronologia dei comandi. In modo che nessuno sarà in grado di cercarlo nel .bash_history
file.
Esiste un modo per eseguire i comandi bash in questo modo?
Risposte:
Inizia il tuo comando con uno spazio e non sarà incluso nella cronologia.
Tenere presente che ciò richiede l' $HISTCONTROL
impostazione della variabile di ambiente .
Verificare che il seguente comando restituisca ignorespace
o
ignoreboth
#> echo $HISTCONTROL
Per aggiungere la variabile d'ambiente se mancante, è possibile aggiungere la seguente riga al profilo bash. Per esempio%HOME/.bashrc
export HISTCONTROL=ignorespace
Dopo aver acquisito nuovamente il profilo, i comandi con prefisso spaziale non verranno scritti $HISTFILE
In una determinata sessione di Bash, imposta il file della cronologia su / dev / null digitando:
export HISTFILE=/dev/null
Nota che, come sottolineato nei commenti, questo non scriverà alcun comando in quella sessione nella cronologia!
Basta non scherzare con il duro lavoro dell'amministratore di sistema, per favore;)
La soluzione di Doodad è più elegante. Basta disinserire la variabile: unset HISTFILE
(grazie!)
/dev/null
autorizzazioni impostate su 0600 al logout. Invece ho usato unset HISTFILE
.
Un'estensione della risposta di @John Doe e @ user3270492. Ma questo sembra funzionare per me.
<your_secret_command>; history -d $((HISTCMD-1))
Non dovresti vedere la voce del comando nella tua cronologia.
Ecco la spiegazione ..
La 'storia -d' cancella la voce menzionata dalla storia.
HISTCMD memorizza il command_number di quello da eseguire successivamente. Quindi, (HISTCMD-1) si riferisce all'ultimo comando eseguito.
Rimuovi una determinata riga dal file della cronologia di Bash
Potresti considerare di usare una shell senza cronologia, come forse
/bin/sh << END
your commands without history
END
(forse /bin/dash
o /bin/sash
potrebbe essere più appropriato di /bin/sh
)
o ancora meglio utilizzare l' utilità batch ad es
batch << EOB
your commands
EOB
La storia conterrebbe quindi sh
o batch
che non è molto significativo
Puoi iniziare la sessione con
export HISTFILE=/dev/null ;history -d $(history 1)
quindi procedi con le tue azioni subdole. L'impostazione del file hist /dev/null
verrà registrata nel file della cronologia, tuttavia questa voce verrà prontamente eliminata e non verrà visualizzata alcuna traccia (almeno nel file della cronologia).
Inoltre, questo non è permanente.
Come accennato da Doodad nei commenti , lo unset HISTFILE
fa bene, ma nel caso in cui desideri anche eliminare un po 'di cronologia, fare echo $HISTFILE
per ottenere la posizione del file di cronologia (di solito ~/.bash_history
) unset HISTFILE
e modificarla ~/.bash_history
(o qualunque cosa HISTFILE
fosse - ovviamente è ora unset
che puoi' lo leggo).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Quindi hai modificato la tua cronologia e il fatto che l'hai modificata!
unset HISTFILE; echo TEST; history
ti darà il comando echo TEST
come il precedente all'ultimo. Anche se dopo aver terminato la sessione e riconnesso, la cronologia non ha effettivamente questa voce. Quindi direi che funziona :)
unset HISTFILE
non sembra interrompere la registrazione dei comandi nella cronologia in memoria, ma impedisce loro di essere registrati in qualunque file $ HISTFILE. Quindi suppongo che tu abbia ancora la tua storia locale in memoria, ma non viene più registrata in un file, che è quello che potresti desiderare! ;)
Puoi anche usare il seguente comando:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Penso che sia un comando molto portatile.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
e ora puoi farlo in questo modo:mysql -uroot -pSecretPassword ; forget
$s
e altre cose in sed. function forget() { // put code here // }
Se stai usando zsh puoi eseguire:
setopt histignorespace
Dopo aver impostato questo, ogni comando che inizia con uno spazio verrà escluso dalla cronologia.
È possibile utilizzare gli alias in .zshrc
per trasformare questo 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."'
Esistono diversi modi per raggiungere questo obiettivo. Questo imposta la dimensione del file della cronologia su 0:
export HISTFILESIZE=0
Questo imposta il file della cronologia su /dev/null
, disabilitandolo efficacemente:
export HISTFILE=/dev/null
Per i singoli comandi, puoi aggiungere il prefisso al comando con uno spazio e non verrà salvato nel file della cronologia. Nota che questo richiede di avere il ignorespace
valore incluso nella $HISTCONTROL
variabile d'ambiente (man bash e cerca ignorespace
maggiori dettagli).
Devi solo eseguire:
$ set +o history
Per vedere di più, esegui:
$ man set
set -x history
, funziona.
Questo comando potrebbe tornare utile. Questo non registra il comando che viene eseguito
history -d $((HISTCMD-1)) && <Your Command Here>