【发布时间】:2017-03-09 17:04:36
【问题描述】:
我有这个 bash 代码:
ip=$1
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@${ip} << EOF
jps | grep server.* | cut -d ' ' -f1 | xargs -L1 -I% jmap -histo % > server-%-$ip-histo.out
EOF
如果此框上有多个服务器实例,如何在文件名中包含 pid。
当前文件写为:server-%-127.0.0.1-heap.out
而不是:server-xxxx-127.0.0.1-histo.out
【问题讨论】:
-
您知道
%只对xargs命令有意义吗?也就是说,你知道> server-%-$ip-histo.out这段代码超出了xargs命令的范围吗? -
您希望我们知道
xargs命令的输入格式吗?请通过最后一个管道发布文本示例。 pid在哪里找到?即,提供该 pid 的命令是什么:jps或jmap? -
好的那么如何使 > server-%-$ip-histo.out 位成为 xargs 范围的一部分,以便可以替换 % ?可能把'周围的地段'
-
这是不可能的。在执行
xargs之前,即在%可能有任何值之前,shell 会获取值server-%-$ip-histo.out并在为了存储来自xargs命令的任何输出。 -
最好的方法是运行一个循环来将
%的每个值保存在一个shell 变量中(比如myvar),然后执行命令行jmap -histo "${myvar}" > server-"${myvar}-$ip"-histo.out。但这可能会出现一个新问题,因为您使用的是 here-document。