2014-09-05 14 views
8

Ja używałem fswatch v0.0.2 jak tak (w tym przypadku uruchomić django testową kombinezon, gdy plik zmienił)Jak uruchomić fswatch, aby wywołać program ze statycznymi argumentami?

$>fswatch . 'python manage.py test'

to działa prawidłowo.

chciałem wykluczyć niektóre pliki, które powodowały test uruchomić więcej niż jeden raz na save (Sublime Text został zapisywania pliku .tmp i podejrzewam pliki .pyc były również przyczyną tego)

Więc zmodernizowane fswatch, aby włączyć tryb -e.

Jednak droga fswatch zmieniła który jest przyczyną mnie kłopoty - to teraz przyjmuje argument rura tak:

$>fswatch . | xargs -n1 program

nie mogę dowiedzieć się, jak przejść w argumenty do programu tutaj. na przykład to nie działa:

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

ani robi to:

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

jak mogę to zrobić bez opakowania moje polecenia w skrypcie bash?

Odpowiedz

14

fswatch dokumentacja (albo Texinfo manual lub wiki lub README) mają przykłady jak to zrobić:

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

pułapek:

  • -0: użyj go, aby upewnić się ścieżek znaki nowej linii są interpretowane poprawnie.
  • -o: użyj go, aby fswatch "sfilmować" wszystkie zdarzenia w zestawie w jeden, drukując tylko liczbę rekordów w zestawie.
  • -I{}: określenie zastępczy jest trick Przegapiłeś dla xargs poprawnie interpretując swoje argumenty polecenia w tych przypadkach, gdzie zrobić nie chcą rekordu (w tym przypadku, ponieważ -o użyto, liczba rekordów w zestawie) przekazane do wykonywanego polecenia.
+0

oznaczyłem to jako poprawne, ponieważ odpowiada sedno mojego pierwszego pytania - użycie xargs bez podania o utput jako argumenty polecenia do uruchomienia. –

8

Alternatywna odpowiedź nie walczy z domyślnym powodem bycia xargsa - przekazywanie wyjścia jako argumentów do polecenia do uruchomienia.

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

który jest wciąż nieco rozwlekły/syntaxy, więc stworzyliśmy bardzo prosty skrypt bash fswatch-do który upraszcza rzeczy dla mnie:

#!/bin/bash 
(while read; do [email protected]; done) 

Wykorzystanie:

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