最近在写一个自动更新的shell,可是发现如果在使用while循环从一个文件中读取ip地址,然后访问就只能读取第一行纪录。代码如下:

while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 ls
done < data

但是如果使用for就没有这个问题,非常的奇怪,for的代码如下:

for LINE in `cat data`
do
echo *******************************************$LINE
ssh 192.168.10.233 ls
done

难道for和while竟然有这么大的差别,不可能吧。经过一番试验以后发现,原来并不是while的for的差别,而是while中使用重定向机制,data文件中的信息都已经读入并重定向给了整个while语句。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,ssh语句正好回读取输入中的所有东西,下面这个shell能很好的说明这个问题:

while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 cat
done < data

执行这个shell就会发现,ssh中的cat语句会打印出data文件中的其他纪录,这就导致调用玩ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候当然也就读不到纪录,循环也就退出了。改进方法是,将ssh的输入重定向输入:

while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 ls < /dev/null
done < data

这样,在while语句中也能顺利的执行ssh语句了。linux的重定向还真复杂。

附录:测试用的data文件

line1
line2
line3
line4

转载于:https://blog.51cto.com/aixuexi/974429

如何在while和for中使用ssh相关推荐

  1. linux 更改ssh端口_如何在Linux中更改SSH端口-简易指南

    linux 更改ssh端口 The default port on SSH is 22. But for security reasons, it's a good idea to change SS ...

  2. key位置 win10生成的ssh_Windows 10:如何在OpenSSH中生成SSH密钥

    通过生成自己的安全密钥,进一步扩展Microsoft在Windows 10中的OpenSSH实现. 图片来源:www.ghost580.comOpenSSH的使用无处不在,通过网络安全访问客户端设备. ...

  3. linux下的ssh端口号修改,如何在 Linux 中更改 SSH 端口

    默认情况下, SSH 侦听端口 22 . 更改默认 SSH 端口可以降低被自动攻击的风险,从而为服务器增加额外的安全层. 和更改默认端口相比,将防火墙配置为仅允许从特定主机访问端口 22 则更加简单和 ...

  4. 如何在Linux命令行中替换多个文件中的字符串

    本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...

  5. linux系统禁用ssh,怎么在Linux系统中禁用 SSH

    今天微子网络与你分享了如何在Linux系统中禁用SSH,微子网络认为这很实用,所以他分享给你学习.希望你看完这篇文章能有所收获.话不多说,让我们和微子网络一起看看 SSH是什么? Openssh叫做O ...

  6. linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存

    本篇文章给大家介绍的内容是关于如何在Ubuntu和LinuxMint中刷新DNS缓存,下面我们来看具体的内容. 域名系统(DNS)是互联网的主干网之一.你无法想象在全球数百万用户的公共网络上运行网站. ...

  7. 聊天软交互原理_来自不同城市的人们如何在freeCodeCamp聊天室中进行交互

    聊天软交互原理 by Déborah Mesquita 由DéborahMesquita 来自不同城市的人们如何在freeCodeCamp聊天室中进行交互 (How people from diffe ...

  8. graphql redux_如何在Redux应用程序中使用GraphQL

    graphql redux by Howon Song 通过宋颂恩 如何在Redux应用程序中使用GraphQL (How to use GraphQL in your Redux app) Fetc ...

  9. 【面试现场】如何在10亿数中找出前1000大的数

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...

最新文章

  1. python装饰器类-Python 装饰器装饰类中的方法
  2. docker进阶 一键安装wordpress
  3. 不是内部或外部命令,也不是可运行的程序 或批处理文件。(如果放了环境变量还是没有用的话)(已经解决)
  4. C# ini文件读写函数
  5. 为什么新手开车起步总是熄火
  6. 说真的,程序员相亲,真的太太太太太太难了 | IT巨能唠
  7. shell下正则表达式与其工具grep
  8. java实现 mysql 身份认证,java-从Filter中的数据库对用户进行身份验证是一种好习惯吗?...
  9. 使用CamlBuilder生成CAML查询语句
  10. 首届InterSystems Idea创意马拉松
  11. 将旧硬盘的内容克隆到新硬盘
  12. Log4Qt 日志格式化(TTCCLayout)
  13. android直播sdk+美颜,直播中有没有美颜SDK有何区别?
  14. Win10下SQL2000 企业管理器 新建表/修改表 崩溃问题的应急
  15. 安装tensorflow报错:Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accu
  16. 从专辑光盘中导出音乐文件
  17. MATLAB【数字图像处理】 实验五:形态学图像处理
  18. 从网页复制内容到富文本、或者富文本里自己加样式,当ajax传参时候,总是莫名其妙丢失变成无意义的html,究竟是为什么呢
  19. matlab不同版本之间编码出错问题20200825
  20. javaweb学习笔记(佟刚老师笔记)

热门文章

  1. 转:Linux 2.4.x内核软中断机制
  2. Ph.D. Grind 读后感- by Liangjun
  3. oracle create tablespace、user and grant
  4. Linux超简单文本编辑器:nano
  5. 【转载】Elasticsearch客户端API使用Demo
  6. logback配置文件详解
  7. java高效获取大文件的行数
  8. Linux:rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.2
  9. String 属于基础的数据类型吗?
  10. polycom安卓手机客户端_安卓 emoji 表情:全变了