Uso bash e vorrei evitare che alcuni comandi vengano mantenuti nella cronologia.
- È possibile farlo solo per il comando successivo?
- È possibile farlo per l'intera sessione?
Uso bash e vorrei evitare che alcuni comandi vengano mantenuti nella cronologia.
Risposte:
e ho appena ricordato un'altra risposta, questa è la vera risposta alla tua domanda.
se hai "ignorespace" in HISTCONTROL, allora bash non ricorderà alcuna riga che inizia con un carattere spazio. non apparirà nemmeno nella storia della shell corrente, per non parlare del salvataggio in $ HISTFILE.
ad es. ho export HISTCONTROL = 'ignoreboth: erasedups' nel mio ~ / .bashrc
ecco i dettagli dalla pagina man di bash:
HISTCONTROL Un elenco di valori separato da due punti che controlla come sono i comandi salvato nell'elenco cronologico. Se l'elenco di valori include ignorespace, le linee che iniziano con un carattere spazio non lo sono salvato nell'elenco cronologico. Un valore di ignoredups provoca righe corrispondente alla voce della cronologia precedente per non essere salvato. Un valore di ignoreboth è una scorciatoia per ignorespace e ignoredups. Un valore delle cancellazioni fa sì che tutte le righe precedenti corrispondano alla riga corrente da rimuovere dall'elenco cronologico prima di salvare quella riga. Qualsiasi valore non presente nell'elenco precedente viene ignorato. Se HISTCONTROL è non impostato o non include un valore valido, tutte le righe lette da il parser di shell viene salvato nell'elenco cronologico, soggetto al valore di HISTIGNORE. La seconda e le successive righe di una multilinea il comando composto non viene testato e viene aggiunto alla cronologia indipendentemente dal valore di HISTCONTROL.
Ecco alcune lezioni di storia che ho imparato da Google:
È possibile impostare la cronologia in modo che ignori determinate stringhe. In questo esempio, ho ignorato i comandi ls, passwd e qualsiasi comando preceduto dallo spazio dei caratteri.
export HISTIGNORE = "ls: passwd:"
Per disabilitare la cronologia per la sessione è possibile emettere:
export HISTSIZE = 0
Se vuoi solo rimuovere l'ultimo comando dalla cronologia, puoi premere Up-arrow, seguito da Ctrl - U(cancella all'inizio della riga), quindi di Up-arrownuovo.
Puoi cancellare qualsiasi singola riga dalla cronologia in questo modo. Basta usare la freccia su o la ricerca o altro per renderla la riga di comando corrente in fase di modifica, quindi premere Ctrl - U, quindi Up-arrowo o Down-arrowper passare a un'altra riga della cronologia.
L'ho scoperto per caso un giorno anni fa. Non ho idea se sia documentato o meno.
In generale, tuttavia, è meno fastidioso non salvare affatto la cronologia della shell corrente con:
HISTFILE=/dev/null
È possibile annullare l'impostazione della HISTFILE
variabile. Da man bash
:
HISTFILE Il nome del file in cui viene salvata la cronologia dei comandi (vedi HIS- TORY di seguito). Il valore predefinito è ~ / .bash_history. Se non impostato, la cronologia dei comandi non viene salvata quando una shell interattiva uscite.
Non penso che ciò impedisca al comando di apparire nella cronologia della shell locale prima che la shell esca.
Vedo che nessuno ha scritto questo metodo, quindi lo farò.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
elimina la voce citata dalla cronologia.
HISTCMD
memorizza il command_number del comando da eseguire successivamente. Quindi, (HISTCMD-1) si riferisce all'ultimo comando eseguito.
Ho realizzato un breve film bash che mostra come funziona: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Dopo aver eseguito il comando e poiché elimina anche il comando stesso, quindi andare su con la freccia non visualizzerà il comando, quindi se pensi di usarlo spesso, sarebbe meglio creare un alias:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Quindi puoi fare:
$ hc command