2014-09-05 1 views
8

я имел обыкновение использовать fswatch v0.0.2 как так (в данном случае для запуска Джанго тестового набора, если файл изменен)Как запустить fswatch для вызова программы со статическими аргументами?

$>fswatch . 'python manage.py test'

это работает отлично.

Я хотел бы исключить некоторые файлы, которые вызывали тест для запуска более чем один раз в экономии (Sublime текст сохранения файла .tmp, и я подозреваю, .pyc файлы были причиной этого)

Так я модернизировал fswatch, чтобы включить режим -e.

Однако путь fswatch изменился, который вызывает у меня неприятности - теперь он принимает трубу аргумент так:

$>fswatch . | xargs -n1 program

Я не могу понять, как передать в качестве аргументов программы здесь. например это не работает:

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

ни делает это:

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

, как я могу сделать это без упаковки мою команду в Баш скрипт?

ответ

14

fswatch документации (либо Texinfo manual или wiki или README) есть примеры того, как это делается:

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

Ловушка:

  • -0: использовать его, чтобы убедиться, что путь с строки новой строки интерпретируются правильно.
  • -o: используйте его, чтобы иметь fswatch «пузырь» всех событий в наборе в один, который печатает только количество записей в наборе.
  • -I{}: определение заполнители трюка вы пропустили для xargs правильно интерпретировать ваши аргументы команды в тех случаях, когда вы сделать не хотят, записи (в данном случае, так как -o был использован, количество записей в наборе) для передачи в исполняемую команду.
+0

отметили это как правильное, так как оно отвечает на суть моего первоначального вопроса - использование xargs без прохождения o utput в качестве аргументов для команды, которая должна быть запущена. –

8

Альтернативный ответ, не связанный с поломкой xargs по умолчанию - передача на выходе в качестве аргументов команды, которая должна быть запущена.

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

Что еще немного многословным/syntaxy, поэтому я создал супер простой Баш скрипт fswatch-do, который упрощает для меня вещи:

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

использование:

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

Смежные вопросы