2012-04-27 99 views
0

我正在嘗試做一個循環來執行一個遠程ssh命令來調用一個進程的pid來殺死它。 像這樣:makefile loop var pipe

target: 
    for node in 23 ; do \ 
    echo $$node ; \ 
    ssh [email protected]$$node "~/jdk1.6.0_31/bin/jps | grep CassandraDaemon | awk '{print \$$1}'" > $(PID); \ 
    ssh [email protected]$$node "kill -9 $(PID); \ 
    done 

,但我得到:

/bin/sh: 3: Syntax error: ";" unexpected 

我認爲是存儲PID的問題,遠程SSH命令返回(它炒菜鍋以及沒有> $(PID)

+0

你似乎對第二無與倫比的雙引號最後一行 – je4d 2012-04-28 04:07:18

回答

1

>重定向到文件,而不是變量。 $()以您可以分配給變量的方式捕獲......但也是make語法,因此您需要將其轉義。當您使用它時,您還需要將其轉義,以便您不會獲得make變量(不,您不能將它存儲在make變量中)。

for node in 23 ; do \ 
    echo $$node ; \ 
    PID=$$(ssh [email protected]$$node "~/jdk1.6.0_31/bin/jps | grep CassandraDaemon | awk '{print \$$1}'"); \ 
    ssh [email protected]$$node "kill -9 $$PID; \ 
done 

(假設你的很多,很多編輯的一個沒有改變的東西從我抄太多,粘貼,要修復它...)

+0

感謝geekosaur !!!! 只能說正確的最後一行是: ssh user @ pc $$ node「kill -9 $$ PID」; \ 最後的「 – 2012-04-27 09:02:35