0

makeでループを実行してリモートsshコマンドを実行し、プロセスのpidを取得して強制終了しようとしています。このような:

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

しかし、私は得ます:

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

私が思う問題は、リモートsshコマンドが返すpidを保存することです(それがなくてもうまくいきます> $(PID)

4

1 に答える 1

1

>変数ではなくファイルにリダイレクトします。 $()変数に割り当てることができる方法でキャプチャしますが、make構文でもあるため、エスケープする必要があります。また、使用するときにエスケープして、make代わりに変数を取得しないようにする必要があります(いいえ、変数に格納することはできませんmake)。

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

(あなたの多くの編集の1つが、それを修正するためにコピーして貼り付けたときからあまり変更されていないと仮定します...)

于 2012-04-27T08:53:11.873 に答える