让 'entr' 执行本地定义的 shell 函数

让 'entr' 执行本地定义的 shell 函数

entr用于在文件更改时运行 shell 命令。以下脚本将输出文件已更改。每当文件/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

如果您希望能够export SHELL=/bin/bash在.env -s cmdcmd

正如记录在联机帮助页(强调我的entr):

-s 使用解释器评估第一个参数由指定SHELL由环境变量

不一定是/bin/bash调用它的 shell,或者用户的登录 shell。

如果SHELL未定义(在脚本等中不必如此),entr则将其自身设置为/bin/sh,在 Debian 上是dash,一个无法使用 和 导出的函数的 shell bash,此外,将消除他们来自环境。

相关内容