Soy un poco cauteloso a la hora de alterar la configuración del historial de bash y solo quiero escribir mi propio historial de bash personalizado. Pensé en usar una función bash como esta:
bash(){
# write to a custom history file manually
echo "$@" >> $HOME/my_bash_history
command bash "$@"
}
export -f bash;
pero esto no funciona del todo; lo que sucede es que se command bash
hace cargo y las cosas ya no pasan por la función bash. Necesito que todas las entradas estándar de bash pasen por esta función bash para que todo se escriba en un archivo personalizado. ¿Alguien tiene una idea sobre cómo hacer esto?
Respuesta1
Lo que quieres es una DEBUG
trampa (ejecutar antes de cada comando) o posiblemente unaPROMPT_COMMAND
(ejecutar antes de cada mensaje).
La trampa está más cerca de tu intento. El concepto básico se describe en¿Bash tiene un gancho que se ejecuta antes de ejecutar un comando?y existe una versión pulida llave en mano comobash-preexec.
Según su autor, bash-preexec es utilizado porBashhubpara proporcionar "historial de bash en la nube", así que estoy seguro de que está a la altura de la tarea de "historial de bash en un archivo".
Respuesta2
Estás intentando implementar algo equivalente aesta "historia eterna":
export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
"$(history 1)" >> ~/.bash_eternal_history'
La idea central es que history 1
(en bash) enumera la última línea dada a bash.
$ echo "$(history 1)"
12766 2019-05-31T20:14:44+0000 echo "$(history 1)"
Que en realidad sólo tiene un valor significativo (no la misma línea) dentro de un script.
Y; PROMPT_COMMAND
ejecuta el history
comando para cada nueva línea dada a bash.
En mi opinión: no parece una buena idea nombrar una función bash
.