entr
é usado para executar comandos shell quando os arquivos são alterados. O seguinte script produziráArquivo alterado.sempre que o arquivo/tmp/data.txté modificado.
#!/usr/bin/env sh
echo "/tmp/data.txt" | entr -s 'echo "File changed."'
Uma vez que os comandos a serem executados se tornem mais complexos, seria conveniente movê-los para uma função separada e chamar entr
a função, assim:
#!/usr/bin/env sh
foo() { echo "File changed!"; }
echo "$0" | entr -s 'foo' # Error: command not found: foo
Infelizmente, isso levanta umacomando não encontradoerro, o que sugere que minha função definida localmente não está disponível para entr
. Existe uma maneira de fazer isso funcionar e qual é o problema subjacente aqui?
Atenciosamente
Responder1
Você deve export SHELL=/bin/bash
antes de invocar env -s cmd
se quiser poder usar funções exportadas do bash dentro do cmd
.
Conforme documentado nopágina de manualde entr
(ênfase minha):
-s
Avalie o primeiro argumento usando o intérpreteespecificado pelaSHELL
variável de ambiente.
Não necessariamente /bin/bash
o shell de onde foi chamado ou o shell de login do usuário.
Se SHELL
não estiver definido (não é necessário, em um script, etc), então entr
será definido como /bin/sh
, que no Debian é dash
, um shell que não pode usar as funções exportadas por bash
e, além disso, iráremovereles do meio ambiente.