entrでファイルタグを使用する

entrでファイルタグを使用する

このファイルが変更されたときに拡張子を持つファイルで関数を実行するmyscript.shために、次のコードを追加しました。.md

function my_function(){
    echo "I\'ve just seen $1"

}
typeset -fx my_function

find . -name "*.md"  | 
    entr -r -s "my_function $0"

ドキュメントに移動: * [...] イベントを発生させた最初のファイルの名前は $0 から読み取ることができます。 *

README.mdを変更すると、「I just saw README.md」が出力されると予想されます。

実際にスクリプトを起動してREADME.mdを変更すると、次のような出力が表示されます。

bash myscript.sh
# output: I've just seen myscript.sh

私に理由を教えてください?

ベストアンサー1

シェルスクリプトでenterを呼び出しています。シェルが変数置換を実行するとき(またはパラメータ拡張マニュアルでは)$0スクリプトのファイル名に展開されます。$0シェルが変数置換を実行しないようにするには、次のようにします\

find . -name "*.md" | entr -r -s "my_function \$0"

編集する:@roaimaが思い出させるように、別の方法は、引用された全文を保護する一重引用符を使用することです。

find . -name "*.md" | entr -r -s 'my_function $0'

気づく:SHELL環境変数がbashと互換性がないように設定されている場合、typeset -fx my_functionentrはまったく機能しない可能性があります(例:機能しませんSHELL=/bin/mksh)。またシェルボーンスクリプトに追加して不要な単語を省略してくださいfunction

#!/bin/bash
my_function(){
    echo "I've just seen $1"
}
typeset -fx my_function

find . -name "*.md" |
    entr -r -s "my_function \$0"

おすすめ記事