entr
se utiliza para ejecutar comandos de shell cuando los archivos cambian. El siguiente script generaráArchivo cambiado.cada vez que el archivo/tmp/datos.txtes modificado.
#!/usr/bin/env sh
echo "/tmp/data.txt" | entr -s 'echo "File changed."'
Una vez que los comandos a ejecutar se vuelvan más complejos, sería conveniente moverlos a una función separada y llamar entr
a la función, así:
#!/usr/bin/env sh
foo() { echo "File changed!"; }
echo "$0" | entr -s 'foo' # Error: command not found: foo
Desafortunadamente, esto plantea unaComando no encontradoerror, lo que sugiere que mi función definida localmente no está disponible para entr
. ¿Hay alguna manera de hacer que esto funcione y cuál es el problema subyacente aquí?
Atentamente
Respuesta1
Debería hacerlo export SHELL=/bin/bash
antes de invocar env -s cmd
si desea poder utilizar las funciones exportadas de bash dentro de cmd
.
Como se documenta en elpágina de manualde entr
(el énfasis es mío):
-s
Evaluar el primer argumento usando el intérprete.especificado por laSHELL
variable de entorno.
No necesariamente /bin/bash
, el shell desde donde se llamó o el shell de inicio de sesión del usuario.
Si SHELL
no está definido (no es necesario, en un script, etc.), entr
lo configurará él mismo en /bin/sh
, que en Debian es dash
, un shell que no puede usar las funciones exportadas por bash
y, además,eliminarellos del medio ambiente.