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 cmd
cmd
文書に記載されているようにマニュアルページ(強調は筆者によるentr
):
-s
インタプリタを使用して最初の引数を評価するSHELL
環境変数で指定。
必ずしも/bin/bash
、それが呼び出されたシェル、またはユーザーのログイン シェルである必要はありません。
が定義されていない場合SHELL
(スクリプトなどで定義する必要はない)、 はentr
それを に設定します/bin/sh
。これはDebianでは でありdash
、 によってエクスポートされた関数を使用できないシェルですbash
。さらに、取り除く環境から彼らを守る。