makefile循环var管道

时间:2012-04-27 08:47:37

标签: loops command-line makefile

我正在尝试在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)的情况下运行良好)

1 个答案:

答案 0 :(得分: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

(假设您的许多编辑之一并没有从我复制和粘贴它以修复它时发生太多变化......)