您好我的文件名绑定在下面的条目:
testnode1 eth0
tetnode2 eth2
现在我正在编写一个bash脚本,使用while将该条目放入变量,然后将其用于下面的命令:
ssh $serv ifconfig | grep $nic
问题是它在第一次阅读之后的早期退出" testnode1"它没有执行下一行" testnod2"
以下是整个代码:
#!/bin/bash
cat bonding | while read line
do
serv=$(echo $line | awk '{print $1}')
nic=$(echo $line | awk '{print $2}')
echo $serv
ssh $serv ifconfig | grep $nic
done
输出:
testnode1
eth0 Link encap:Ethernet HWaddr 00:0C:29:99:C0:CD
预期产出
testnode1
eth0 Link encap:Ethernet HWaddr 00:0C:29:99:C0:CD
testnode2
eth2 Link encap:Ethernet HWaddr 00:0A:30:40:QB:A1
有人能指出我的错误,谢谢
答案 0 :(得分:1)
那是因为ssh
从stdin读取。由于您要循环读取文件,ssh
会读取所有内容,并且在下一次迭代中,没有什么可读的了。因此,循环在一次迭代后退出。
你可以这样做:
ssh "$serv ifconfig | grep $nic" </dev/null
或
ssh -n $serv ifconfig | grep $nic
来自ssh
手册:
-n
从/ dev / null重定向stdin(实际上,阻止从stdin读取)。当在ssh中运行ssh时必须使用它 背景。一个常见的技巧是使用它来运行X11程序 远程机器。例如,ssh -n shadows.cs.hut.fi emacs&amp;将 在shadows.cs.hut.fi上启动emacs,X11连接将是 通过加密频道自动转发。 ssh程序 将放在后台。 (如果ssh需要,这不起作用 要求输入密码或密码;另见-f选项。)