讓 '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

如果您希望能夠在 .bashrc 中使用 bash 匯出函數,則應該export SHELL=/bin/bash在呼叫之前呼叫。env -s cmdcmd

正如記錄在線上說明頁(強調我的entr):

-s 使用解釋器評估第一個參數SHELL由環境變數指定

不一定是/bin/bash呼叫它的 shell,或是使用者的登入 shell。

如果SHELL未定義(在腳本等中不必如此),entr則將其自身設置為/bin/sh,在 Debian 上是dash,一個無法使用 和 導出的函數的 shell bash,此外,將消除他們來自環境。

相關內容