Voglio eseguire alcuni comandi ma non voglio salvarli nella cronologia dei comandi. In modo che nessuno sarà in grado di cercarlo nel .bash_historyfile.
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_historyfile.
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' $HISTCONTROLimpostazione della variabile di ambiente .
Verificare che il seguente comando restituisca ignorespaceo
ignoreboth
#> echo $HISTCONTROLPer aggiungere la variabile d'ambiente se mancante, è possibile aggiungere la seguente riga al profilo bash. Per esempio%HOME/.bashrc
export HISTCONTROL=ignorespaceDopo 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/nullautorizzazioni 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/dasho /bin/sashpotrebbe essere più appropriato di /bin/sh)
o ancora meglio utilizzare l' utilità batch ad es
batch << EOB
your commands
EOB
La storia conterrebbe quindi sho batchche 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/nullverrà 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 HISTFILEfa bene, ma nel caso in cui desideri anche eliminare un po 'di cronologia, fare echo $HISTFILEper ottenere la posizione del file di cronologia (di solito ~/.bash_history) unset HISTFILEe modificarla ~/.bash_history(o qualunque cosa HISTFILEfosse - ovviamente è ora unsetche 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; historyti darà il comando echo TESTcome 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 HISTFILEnon 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
$se 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 .zshrcper 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 ignorespacevalore incluso nella $HISTCONTROLvariabile d'ambiente (man bash e cerca ignorespacemaggiori 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>