entr
используется для запуска команд оболочки при изменении файлов. Следующий скрипт выведетФайл изменен.всякий раз, когда файл/tmp/data.txtизменен.
#!/usr/bin/env sh
echo "/tmp/data.txt" | entr -s 'echo "File changed."'
Как только команды для выполнения станут более сложными, будет удобно перенести их в отдельную функцию и вызвать entr
ее, например, так:
#!/usr/bin/env sh
foo() { echo "File changed!"; }
echo "$0" | entr -s 'foo' # Error: command not found: foo
К сожалению, это вызываеткоманда не найденаошибка, которая предполагает, что моя локально определенная функция недоступна для entr
. Есть ли способ заставить это работать и в чем здесь основная проблема?
С уважением
решение1
Если вы хотите использовать экспортированные функции bash внутри , export SHELL=/bin/bash
перед вызовом следует выполнить команду .env -s cmd
cmd
Как указано встраница руководстваиз entr
(выделено мной):
-s
Оцените первый аргумент с помощью интерпретаторауказанныйSHELL
переменной окружения.
Не обязательно /bin/bash
, из какой оболочки она была вызвана, или из какой оболочки пользователя она была введена.
Если SHELL
не определено (это не обязательно, в скрипте и т. д.), то entr
установит его в /bin/sh
, который в Debian является dash
, оболочкой, которая не может использовать функции, экспортируемые , bash
и, более того, будетудалятьих из окружающей среды.