Evita di mantenere il comando nella storia


33

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?

Nota che se l'obiettivo è nascondere le password negli argomenti della riga di comando, saranno comunque visibili tramite ps
Benitok,

Risposte:


36

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.

1
+1 per la presa spaziale: D
petrus

19

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

Riferimento


7

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

3

È possibile annullare l'impostazione della HISTFILEvariabile. 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.


2

A volte lo faccio

export HISTFILE=/dev/null

1

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.

HISTCMDmemorizza 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.