首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh远程命令执行引用和管道awk

ssh远程命令执行引用和管道awk
EN

Stack Overflow用户
提问于 2020-03-29 22:32:26
回答 2查看 450关注 0票数 0

我正在写一个脚本,它应该找到某些磁盘,并添加主机名到他们。

我在bash中通过for循环将其用于40台服务器

代码语言:javascript
复制
#!/bin/bash

for i in myservers{1..40}
    do ssh user@$i findmnt -o SIZE,TARGET -n -l |
            grep '1.8T\|1.6T\|1.7T' | 
            sed 's/^[ \t]*//' |
            cut -d ' ' -f 2 |
            awk -v HOSTNAME=$HOSTNAME '{print HOSTNAME ":" $0}'; done | 
    tee sorted.log

你能帮我解决这里的报价问题吗?看起来awk从本地主机得到管道(主机名),而不是从远程服务器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-29 23:50:52

第一个管道之后的所有内容都在本地运行,而不是在远程服务器上运行。

尝试引用整个管道,使其在远程服务器上运行:

代码语言:javascript
复制
#!/bin/bash

for i in myservers{1..40}
    do ssh user@$i "findmnt -o SIZE,TARGET -n -l | 
        sed 's/^[ \t]*//' |
        cut -d ' ' -f 2 |
        awk -v HOSTNAME=\$HOSTNAME '{print HOSTNAME \":\" \$0}'" ;
done | tee sorted.log
票数 0
EN

Stack Overflow用户

发布于 2020-03-30 00:00:01

这是你的东西的一个简短版本:

代码语言:javascript
复制
findmnt -o SIZE,TARGET -n -l | 
awk -v HOSTNAME=$HOSTNAME '/M/{print HOSTNAME ":" $2}'

适用于上述情况:

代码语言:javascript
复制
for i in myservers{1..40}
    do ssh user@$i   bash -c ' 
            findmnt -o SIZE,TARGET -n -l | 
              awk -v HOSTNAME=$HOSTNAME '"'"'/M/{print HOSTNAME ":" $2}'"'"' '
         done | 
    tee sorted.log

请参阅:How to escape the single quote character in an ssh / remote bash command?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60915714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档