Ejecute el script bash cada vez que se ejecutan líneas de comando

9

Soy un nuevo usuario de Ubuntu / Linux, me gustaría hacer una pregunta como mi título anterior.

Por ejemplo, tengo un archivo bash ./script, me gustaría que se ejecute automáticamente cuando escribo cualquier línea de comando. Una vez que ejecuto línea de comandos pwd, entonces el ./scriptse ejecutará. Una vez que escriba la siguiente línea de comandos ls -la, entonces el ./scriptse ejecutará de nuevo.

Ender Phan
fuente
44
podemos preguntar: ¿qué tipo de acción tiene la intención de hacer en cada comando escrito? ¿y debería ser solo para aquellos que escriben de forma interactiva? o también para cualquier comando en un script? ¿Y los comandos escritos sobre ssh? etc. Esto podría ser un problema XY
Olivier Dulac

Respuestas:

13

Necesitas establecer PROMPT_COMMANDvariable. De man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

Por ejemplo, esto escribirá la fecha actual /tmp/PCcada vez que se ejecute un comando:

 $ PROMPT_COMMAND="date > /tmp/PC"
Arkadiusz Drabczyk
fuente
1
Sí, lo tengo ... una solución genial. (votado a favor)
Ender Phan el
1
Esto está mal. El comando echo $(date)se ejecutará en el momento de la declaración, por lo que siempre se mostrará (guardará) al mismo tiempo.
heemayl
@heemayl: por supuesto que tienes razón, lo arreglé
Arkadiusz Drabczyk
@ lộcphan Si una de estas respuestas resuelven su problema, por favor tome un momento y aceptarla haciendo clic en la marca de verificación a la izquierda. Eso marcará la pregunta como respondida y es la forma en que se agradece en los sitios de Stack Exchange.
Terdon
@heemayl: ¿Por qué? ...
Arkadiusz Drabczyk
11

Está buscando una PROMPT_COMMANDvariable de entorno, el valor de esta variable se ejecutará como comando, después de que se ejecute cada comando dado en el terminal, justo antes de mostrar el siguiente mensaje.

Por ejemplo, configúrelo como:

export PROMPT_COMMAND='/path/to/script'

Haga el script /path/to/script, ejecutable primero.

Ahora el script se ejecutará después de cada comando.

Solo para tener en cuenta, si no desea que la variable se exporte, es decir, que sea una variable de shell en lugar de una variable de entorno, suelte export:

PROMPT_COMMAND='/path/to/script'

De man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.
heemayl
fuente
Lo tengo, muchas gracias por tu ayuda :) (por cierto votado)
Ender Phan
¿Por qué estás usando export?
Arkadiusz Drabczyk
@ArkadiuszDrabczyk exporthará que la variable sea PROMPT_COMMANDuna variable de entorno, es decir, la variable estará disponible para todos los procesos secundarios (por ejemplo, subcapas) del shell actual. Si solo desea limitarlo solo dentro de la sesión de shell actual (variable de shell), elimine export.
heemayl
55
@heemayl: IMO exportno es una buena práctica aquí, PROMPT_COMMANDsolo debe establecerse en un archivo de inicio de shell interactivo y no debe ser visible en el entorno
Arkadiusz Drabczyk