Estoy escribiendo un script simple para grep mi historial de bash para encontrar una cadena particular. En la línea de comando, puedo hacer lo siguiente, que funciona bien:
history | grep git
Sin embargo, cuando creo un script bash con el mismo comando que el anterior, de repente history
no devuelve nada:
#!/bin/bash
history | grep git
Cuando elimino la primera línea #!/bin/bash
, mi script vuelve a funcionar. ¿Que está sucediendo aquí? ¿Cómo puedo usar history
dentro de un script bash?
bash
shell-script
command-history
Martin Vegter
fuente
fuente
bash
usuario v3, por mera frustración, jaja). Al menos para Martin, mi solución fue de gran ayuda, eso es (al menos) un consuelo.Cuando ejecuta un script de shell bash, por ejemplo ejecutando un archivo ejecutable cuya línea shebang es
#!/bin/bash
, el script se ejecuta en un shell no interactivo. Una de las características de un shell no interactivo es que el historial está deshabilitado. Entonces, si desea que su script pueda usar el historial, necesitaría hacer algo como esto:Por supuesto, en este caso podrías haber hecho:
Dado que los dos anteriores requieren que el archivo de historial (
~/.bash_history
) esté actualizado, lo que casi seguro no será.No estoy seguro de cómo ejecutar su script después de que se elimine la línea shebang. Obtener el archivo (p. Ej., Con
.
) no es lo mismo que ejecutar el script porque los comandos se ejecutan en el shell actual, que tiene el historial habilitado.fuente
history -a
justo después del comando set para asegurarse de que los últimos comandos se agreguen primero al archivo?