19

私はfswatch v0.0.2をそのように使用していました(この例では、ファイルが変更されたときにdjangoテストスーツを実行します)

$>fswatch . 'python manage.py test'

これはうまくいきます。

保存ごとにテストが複数回実行される原因となっているいくつかのファイルを除外したかった (崇高なテキストは .tmp ファイルを保存していましたが、.pyc ファイルもこれを引き起こしていると思われます)

そこで、fswatch をアップグレードして -e モードを有効にしました。

ただし、fswatch の方法が変更されたため、問題が発生しました。次のようなパイプ引数を受け入れるようになりました。

$>fswatch . | xargs -n1 program

ここでプログラムに引数を渡す方法がわかりません。たとえば、これは機能しません:

$>fswatch . | xargs -n1 python manage.py test

これもしません:

$>fswatch . | xargs -n1 'python manage.py test'

コマンドをbashスクリプトにパッケージ化せずにこれを行うにはどうすればよいですか?

4

2 に答える 2

24

xargs のデフォルトの理由と戦わない別の答え - 実行するコマンドへの引数として出力を渡します。

fswatch . | (while read; do python manage.py test; done)

fswatch-doこれはまだ少し冗長/構文なので、物事を簡素化するための非常に単純な bash スクリプトを作成しました。

#!/bin/bash  
(while read; do "$@"; done)

利用方法:

fswatch -r -o -e 'pyc' somepath | fswatch-do python manage.py test someapp.SomeAppTestCase

于 2014-09-08T10:47:11.447 に答える
24

fswatchドキュメンテーション ( Texinfo マニュアル、またはwiki、またはREADME) には、これがどのように行われるかの例があります:

$ fswatch [opts] -0 -o path ... | xargs -0 -n1 -I{} your full command goes here

落とし穴:

  • xargs -0, fswatch -0: 改行を含むパスが正しく解釈されるようにするために使用します。
  • fswatch -o:fswatchセット内のすべてのイベントを「バブル」して、セット内のレコード数のみを出力する単一のイベントにするために使用します。
  • -I{}: プレースホルダーを指定することは、レコード (この場合は、セット内のレコード数が使用されているため) をコマンドに渡したくxargsない場合に、コマンド引数を正しく解釈するために見逃したトリックです。実行されました。-o
于 2014-09-08T10:03:42.300 に答える