我正在写一个脚本,它应该找到某些磁盘,并添加主机名到他们。
我在bash中通过for循环将其用于40台服务器
#!/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从本地主机得到管道(主机名),而不是从远程服务器。
发布于 2020-03-29 23:50:52
第一个管道之后的所有内容都在本地运行,而不是在远程服务器上运行。
尝试引用整个管道,使其在远程服务器上运行:
#!/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发布于 2020-03-30 00:00:01
这是你的东西的一个简短版本:
findmnt -o SIZE,TARGET -n -l |
awk -v HOSTNAME=$HOSTNAME '/M/{print HOSTNAME ":" $2}'适用于上述情况:
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?
https://stackoverflow.com/questions/60915714
复制相似问题