Как запустить fswatch для вызова программы со статическими аргументами?
Я использовал fswatch v0.0.2 так (в этом случае для запуска тестового костюма django при изменении файла)
$>fswatch . 'python manage.py test'
это прекрасно работает.
Я хотел исключить некоторые файлы, из-за которых тест запускался более одного раза для сохранения (Sublime text сохранял файл .tmp, и я подозреваю, что файлы .pyc также вызывают это)
Итак, я обновил fswatch, чтобы включить режим -e.
Однако способ fswatch изменился, что вызывает у меня проблемы - теперь он принимает аргумент pipe следующим образом:
$>fswatch . | xargs -n1 program
Я не могу понять, как передать аргументы в программу здесь. например это не работает:
$>fswatch . | xargs -n1 python manage.py test
и не делает этого:
$>fswatch . | xargs -n1 'python manage.py test'
как я могу это сделать без упаковки моей команды в bash script?
Ответы
Ответ 1
fswatch
(либо руководство Texinfo, либо wiki или README
) приведены примеры того, как это делается:
$ fswatch [opts] -0 path ... | xargs -0 -n1 -I{} your full command goes here
Ловушки:
-
-0
: используйте его, чтобы убедиться, что пути с символами новой строки интерпретируются правильно.
-
-o
: используйте для него fswatch
"пузырь" всех событий в наборе в один, который печатает только количество записей в наборе.
-
-I{}
: указать местозаполнитель - это трюк, который вы пропустили для xargs
правильно интерпретируете свои аргументы команды в тех случаях, когда вы не хотите записи (в этом случае, поскольку -o
было использовано, количество записей в наборе), которые будут переданы в исполняемую команду.
Ответ 2
Альтернативный ответ, а не борьба с аргументом по умолчанию для xargs - передача на выходе в качестве аргументов команды, которую нужно запустить.
fswatch . | (while read; do python manage.py test; done)
Это еще немного словесный/синтаксис, поэтому я создал супер простой bash script fswatch-do
, который упрощает для меня вещи:
#!/bin/bash
(while read; do [email protected]; done)
использование:
fswatch -r -o -e 'pyc' somepath | fswatch-do python manage.py test someapp.SomeAppTestCase