【问题标题】:bash xargs -I% using its argument,bash xargs -I% 使用它的参数,
【发布时间】: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 命令有意义吗?也就是说,你知道&gt; server-%-$ip-histo.out这段代码超出了xargs命令的范围吗?
  • 您希望我们知道xargs 命令的输入格式吗?请通过最后一个管道发布文本示例。 pid在哪里找到?即,提供该 pid 的命令是什么:jpsjmap
  • 好的那么如何使 > server-%-$ip-histo.out 位成为 xargs 范围的一部分,以便可以替换 % ?可能把'周围的地段'
  • 这是不可能的。在执行 xargs 之前,即在 % 可能有任何值之前,shell 会获取值 server-%-$ip-histo.out 并在为了存储来自xargs 命令的任何输出。
  • 最好的方法是运行一个循环来将% 的每个值保存在一个shell 变量中(比如myvar),然后执行命令行jmap -histo "${myvar}" &gt; server-"${myvar}-$ip"-histo.out。但这可能会出现一个新问题,因为您使用的是 here-document。

标签: bash shell unix xargs


【解决方案1】:

如何在文件名中包含 pid,以防多服务器 此框上的实例。

替换

xargs -L1 -I% jmap -histo % > server-%-$ip-histo.out

while read pid; do jmap -histo \$pid >server-\$pid-$ip-histo.out; done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2018-06-02
    • 1970-01-01
    • 2016-06-11
    • 2021-09-06
    相关资源
    最近更新 更多