2017-02-20 11 views
1

私はこの問題をmakefileに持っています。このコマンドを実行すると、Makefileからシェルコマンドを実行することができません

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

端末から正常に動作します。しかし、メイクファイルから、このルールに:

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

$は、makefileで特別な意味を持ちます。文字通りシェルに渡すためには、それを2倍にする必要があります。

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

ご協力いただきありがとうございます。私は純粋なシェルコマンドが文字通り渡されると思った。 –

+0

あなたはそれをどう思いますか? makefileに '$(CC)$ <'のようなコマンドはありませんか?それはmakefileの '$'を解析しています。 – Barmar

関連する問題