Hacer que 'entr' ejecute una función de shell definida localmente

Hacer que 'entr' ejecute una función de shell definida localmente

entrse 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 entra 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/bashantes de invocar env -s cmdsi 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 la SHELLvariable de entorno.

No necesariamente /bin/bash, el shell desde donde se llamó o el shell de inicio de sesión del usuario.

Si SHELLno está definido (no es necesario, en un script, etc.), entrlo configurará él mismo en /bin/sh, que en Debian es dash, un shell que no puede usar las funciones exportadas por bashy, además,eliminarellos del medio ambiente.

información relacionada