Tenho um pouco de medo de mexer nas configurações do histórico do bash e só quero escrever meu próprio histórico personalizado do bash. Pensei em usar uma função bash como esta:
bash(){
# write to a custom history file manually
echo "$@" >> $HOME/my_bash_history
command bash "$@"
}
export -f bash;
mas isso não funciona muito bem - o que acontece é que o command bash
assume o controle e as coisas não passam mais pela função bash. Eu preciso que todo o stdin do bash passe por essa função bash para que tudo seja gravado em um arquivo personalizado. Alguém tem uma ideia de como fazer isso?
Responder1
O que você deseja é uma DEBUG
armadilha (executada antes de cada comando) ou possivelmente uma PROMPT_COMMAND
(executada antes de cada prompt).
A armadilha está mais perto da sua tentativa. O conceito básico é descrito emO bash tem um gancho que é executado antes de executar um comando?e uma versão pronta para uso polida existe comobash-preexec.
Segundo seu autor, bash-preexec é usado porBash Hubpara fornecer "histórico do bash na nuvem", então tenho certeza de que está à altura da tarefa de "histórico do bash em um arquivo".
Responder2
Você está tentando implementar algo equivalente aesta "história eterna":
export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
"$(history 1)" >> ~/.bash_eternal_history'
A ideia central é que history 1
(no bash) liste a última linha dada ao bash.
$ echo "$(history 1)"
12766 2019-05-31T20:14:44+0000 echo "$(history 1)"
Que na verdade só tem um valor significativo (não a mesma linha) dentro de um script.
E; PROMPT_COMMAND
executa o history
comando para cada nova linha fornecida ao bash.
IMO: Não parece ser uma boa ideia nomear uma função bash
.