2014-09-05 13 views
8

Ho usato per usare v0.0.2 fswatch in questo modo (in questo caso per eseguire prova costume Django quando cambia un file)Come eseguire fswatch per chiamare un programma con argomenti statici?

$>fswatch . 'python manage.py test'

questo funziona bene.

ho voluto escludere alcuni file che causavano il test di eseguire più di una volta al risparmio (il testo Sublime stava salvando un file tmp, e ho il sospetto file .pyc sono stati anche causando questo)

Così ho aggiornato fswatch per abilitare la modalità -e.

Tuttavia il modo fswatch è cambiato, che mi sta causando problemi - ora accetta un argomento del tubo in questo modo:

$>fswatch . | xargs -n1 program

io non riesco a capire come passare in argomenti per il programma qui. per esempio. questo non funziona:

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

né fa questo:

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

come posso fare questo senza imballaggio il mio comando in uno script bash?

risposta

14

fswatch documentazione (sia la Texinfo manual, o la wiki, o README) hanno esempi di come questo viene fatto:

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

insidie:

  • -0: usarlo per assicurarsi che i percorsi con i newline sono interpretati correttamente.
  • -o: utilizzarlo per avere "fswatch" bolla "tutti gli eventi nel set in uno solo stampando solo il numero di record nel set.
  • -I{}: specificare un segnaposto è il trucco vi siete persi per xargs interpretare correttamente i tuoi argomenti di comando in quei casi in cui si fanno non vogliono il record (in questo caso, dal momento che -o è stato utilizzato, il numero di record nel set) da passare al comando in esecuzione.
+0

hanno contrassegnato questo come corretto come risponde al punto cruciale della mia domanda iniziale - usando xargs senza passare la o utput come argomenti per il comando da eseguire. –

8

La risposta alternativa non combatte il motivo predefinito di xargs per essere - passare l'output come argomento al comando da eseguire.

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

che è ancora un po 'prolisso/syntaxy, così ho creato un super semplice script bash fswatch-do che semplifica le cose per me:

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

utilizzo:

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

Problemi correlati