2

fswatch を使用して、保存するたびに単体テスト フレームワークでファイルを実行したいと考えています。

テストとして、fswatch を実行し、テキスト エディターで /my/path/test.txt を少し変更すると、期待どおりの出力が得られます。

$ fswatch . | xargs -I {} echo {} {}
/my/path/test.txt /my/path/test.txt

しかし、途中でgrepを挿入してプロセスを繰り返すと、出力が得られません:

$ fswatch . | grep test | xargs -I {} echo {} {}

私は何を間違っていますか?

編集

fswatch + grep は単独で正常に動作します

$ fswatch . | grep test
/my/path/test.txt
4

2 に答える 2

1

すでに述べたように、ブロックバッファ出力を行わない--line-bufferedように指示するため、行全体をすぐに標準出力に書き込みます。がパイプに書き込むときはブロック バッファリングがデフォルトの動作であり、ターミナルに書き込むときはライン バッファリングがデフォルトの動作です。grep grep

現在:fswatchドキュメントで説明されているように、ファイル名には改行文字を含めることができます。したがって、-0(持っているような他のファイル処理ユーティリティと同様findに)が存在します。grepline-buffer に指示してそのようなファイルにヒットすると、レコードが壊れ てしまいます。fswatch

代わりにフィルターを使用してフィルタリングしないのはなぜですか? 単純なフィルタリングの場合、使いやすいです。そうfswatchすれば、これらの特殊性やコーナーケースについて心配することなく、ファイル名を内部的に一致させることができます。

于 2017-01-25T10:45:31.503 に答える