2017-02-20 4 views
1

У меня есть эта проблема с make-файлом. Когда я выполняю эту команду:Невозможно выполнить команду оболочки из Makefile

kill $(ps aux | grep '[p]ython service/logdata.py' | awk '{print $2}')

с терминала работает нормально. Но с этим правилом из Makefile:

stop: 
    kill $(ps aux | grep '[p]ython service/logdata.py' | awk '{print $2}') 

Я получаю эту ошибку:

kill 

Usage: 
kill [options] <pid> [...] 

Options: 
<pid> [...]   send signal to every <pid> listed 
-<signal>, -s, --signal <signal> 
         specify the <signal> to be sent 
-l, --list=[<signal>] list all signal names, or convert one to a name 
-L, --table   list all signal names in a nice table 

-h, --help  display this help and exit 
-V, --version output version information and exit 

For more details see kill(1). 
makefile:19: recipe for target 'stop' failed 
make: *** [stop] Error 1 

Я уже проверил, что выход Grep не пуст.

Заранее спасибо.

ответ

3

$ имеет специальное значение в make-файлах, вам нужно удвоить его, чтобы передать его буквально в оболочку.

stop: 
    kill $$(ps aux | grep '[p]ython service/logdata.py' | awk '{print $$2}') 
+0

Благодарю вас за помощь. Я думал, что чистые команды оболочки передаются буквально. –

+0

Почему вы так думаете? Разве вы не видели команды типа '$ (CC) $ <' в make-файле? Это разбор '' 'в make-файле. – Barmar

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