'entr' にローカルに定義されたシェル関数を実行させる

'entr' にローカルに定義されたシェル関数を実行させる

entrファイルが変更されたときにシェルコマンドを実行するために使用されます。次のスクリプトは出力しますファイルが変更されました。ファイルがデータ変更されます。

#!/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 cmdcmd

文書に記載されているようにマニュアルページ(強調は筆者によるentr):

-s インタプリタを使用して最初の引数を評価するSHELL環境変数で指定

必ずしも/bin/bash、それが呼び出されたシェル、またはユーザーのログイン シェルである必要はありません。

が定義されていない場合SHELL(スクリプトなどで定義する必要はない)、 はentrそれを に設定します/bin/sh。これはDebianでは でありdash、 によってエクスポートされた関数を使用できないシェルですbash。さらに、取り除く環境から彼らを守る。

関連情報