【问题标题】:makefile loop var pipemakefile 循环 var 管道
【发布时间】:2012-04-27 08:47:36
【问题描述】:

我正在尝试在 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) 也可以正常工作)

【问题讨论】:

  • 你似乎在倒数第二行有一个无与伦比的双引号

标签: loops command-line makefile


【解决方案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

(假设您的许多编辑中的一个与我复制并粘贴以修复它时相比没有太大改变......)

【讨论】:

  • 感谢极客!!!!只能说正确的最后一行是: ssh user@pc$$node "kill -9 $$PID"; \最后一个“
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多