質問: シェルマジックで変更されたときに単一のファイルでコマンドを実行する(拡張子を置き換えるなど) 同じディレクトリにいくつかの 。gv ファイル( graphviz )を書き込んでおり、そのうちの1つを保存したらすぐにneatoを使用してpngファイルを作成したいと考えています。 。私はmacos10.12.6を使用しており、デフォルトのシェルとしてzshを使用しています。ファイルの変更を監視するために、 http://entrproject.org/ からentrをインストールしました。 。運が悪かったので次のコマンドを試しました$ echo $0 -zsh $ ls *.gv | entr 'f="/_";neato -tpng "$f" -o"${f/%\.gv/.png}"' entr: exec f="/_";neato -tpng "$f" -o"${f/%\.gv/.png}": no such file or directory 以下の作品 最終変更ファイルの簡単な印刷 $ ls *.gv | entr echo /_ # press <space> to manually trigger event to see last changed file /users/hotschke/complete.gv すべてのファイルに同じ出力名を使用する: $ ls *.gv | entr neato -tpng /_ -oconstantname.png .gvを.pngに置き換えます $ f="/users/hotschke/complete.gv";neato -tpng "$f" -o"${f/%\.gv/.png}" entrの特別な引数/_に注意してください 特別な/_引数(perlの$_にいくぶん類似しています)は、変更された最初のファイルを参照する簡単な方法を提供します。単一のファイルがリストされている場合、これはパス名を2回入力しないようにするための便利な方法です。 さまざまなツール(ウォッチマン、ウォッチドッグ、fswatch、entr、launchd(macのみ)など)を使用していくつかの回答があると便利です。ディスカッションも参照してください https://stackoverflow.com/q/1515730/ =)
回答: entrでスクリプトを呼び出すtl; dr:スクリプトへの引数として/_をdothethingTMに渡します特別な引数や変数をいじくりまわすのではなく、/_を単純なスクリプト(それ自体が1つのライナーにすることができます)に渡して、pngを生成します。$ ls *.gv | entr ./update.sh /_ 次の行に沿ってupdate.shを使用します。neato -tpng "$1" -o"${1/%\.gv/.png}" 上記のアプローチを、imagemagickを使用して画像をconvertする簡単なスクリプトでテストしました。これは引用符なしで機能しますが、ファイル名にスペースなどがある場合はそのままにしておくことをお勧めします。ちなみに、私はentrを使用した更新スクリプトを使用する傾向があります。これにより、状況がより明確になります。たとえば、私はentrを使用してlatexソースファイルを監視し、更新されたpdfを生成します。その場合、更新スクリプトはxelatex、biberを実行し、pdfビューア(pkill -hup mupdf)。