![Bash 函数使用命令进行 ssh](https://linux22.com/image/736287/Bash%20%E5%87%BD%E6%95%B0%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E8%BF%9B%E8%A1%8C%20ssh.png)
我有一个简单的脚本来检查一组主机的正常运行时间。但是 ssh 命令也将“uptime”命令用作主机名,并在第一次迭代后抛出错误。
while read line
do
echo "Turning off Monitoring for Host: $line"
monitoring_off
check_uptime $line
done < "$HOSTFILE"
check_uptime() {
ssh $1 'uptime'
}
以下是我的脚本执行的输出:
*****************************
14:08:44 up 203 days, 2:34, 1 user, load average: 1.22, 1.11, 0.79
ssh: Could not resolve hostname uptime: nodename nor servname provided, or not known
你能帮我找出我的错误吗
答案1
摘自答案:
问题是 [该函数] 运行ssh
命令并默认ssh
从 stdin(即您的输入文件)读取。因此,您只能看到处理的第一行,因为ssh
会消耗文件的其余部分并且您的 while 循环会终止。
为了防止这种情况,请将-n
选项传递给您的ssh
命令,使其从/dev/null
标准输入而不是标准输入读取。
check_uptime() {
ssh -n $1 'uptime'
}