A abordagem mais simples é usar a funcionalidade já fornecida pelo bash. Especificamente, a variável HISTIGNORE
:
HISTCONTROL
A colon-separated list of values controlling how commands are
saved on the history list. If the list of values includes
ignorespace, lines which begin with a space character are not
saved in the history list.
Então, você poderia fazer algo tão simples quanto
$ HISTCONTROL=ignorespace
Em seguida, todos os comandos que você inserir com um espaço à esquerda serão ignorados:
HISTCONTROL=ignorespace
$ history -c ## clear previous history for this session
$ echo foo
foo
$ echo bar
bar
$ history
1 echo foo
2 history
Como você pode ver acima, o comando que começou com um espaço foi ignorado.
Você também pode usar HISTIGNORE
:
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the com‐
plete line (no implicit '*' is appended). Each pattern is
tested against the line after the checks specified by HISTCON‐
TROL are applied. In addition to the normal shell pattern
matching characters, '&' matches the previous history line. '&'
may be escaped using a backslash; the backslash is removed
before attempting a match. The second and subsequent lines of a
multi-line compound command are not tested, and are added to the
history regardless of the value of HISTIGNORE.
Se você definir HISTIGNORE
para algo como #foo
e, em seguida, acrescentar isso aos comandos que deseja ignorar, poderá obter o mesmo efeito:
$ HISTIGNORE="*#foo"
$ history -c
$ echo foo
foo
$ echo "bar" #foo
bar
$ history
1 echo foo
2 history
Em ambos os casos, se você quiser salvá-lo em um arquivo, basta executar history > file
. Como alternativa, defina o arquivo de histórico como file
para a sessão:
$ HISTFILE="/tmp/file"
$ HISTCONTROL=ignorespace
$ history -c
$ echo foo
foo
$ echo bar
bar
$ history -a ## write the session's history to $HISTFILE
$ cat /tmp/file
echo foo
history -a