• shell下在while循环中使用ssh命令的问题


    1 现象描述

      最近使用ssh批量执行命令(已经做了密钥互信了),脚本读取配置文件中的主机列表(内容为每行一台主机IP地址),然后执行,可是每次只是执行第一台,就退出循环了。

    2 排查思路

      由于脚本比较简单,只是读取主机,然后ssh而已,所以问题应该出现在ssh上

    3 确定问题

      搞不通ssh命令为什么会导致shell退出,最后上网搜了一下才找到答案。

    ssh命令在每次执行时,会读取所有的标准输入中的内容。
    

      对于while循环,当按照如下方式使用时:

    while  read Line
        do 
            echo $Line
    done  < $filename
    

      这里使用重定向,将文件内容输入到while命令,while命令每次使用read从输入中读取一行数据。

      问题就在这里,如果在while循环中调用了ssh命令,那么ssh就会把当前输入中所有的数据读走,也就是重定向给while命令的数据,都被ssh命令读走了,以至于下次循环的时候,read读到的内容为空,导致循环提前结束。

    4 处理结果  

      解决这个问题两种方式

    1. 使用ssh的-n参数:用/dev/null来当ssh的输入,阻止ssh读取本地的标准输入内容。
    2. ssh xxxx < /dev/null 重定向shell命令的输入
  • 相关阅读:
    还需要做恰当的解读,此时你可能需要一些书:
    创业公司的架构演进史
    任务调度平台Cuckoo-Schedule
    ORACLE中死锁
    Action的模型绑定
    三次握手、四次握手、backlog
    Django框架
    扩展BootstrapTable的treegrid功能
    Identity Service
    Linux权限
  • 原文地址:https://www.cnblogs.com/dachenzi/p/8031959.html
Copyright © 2020-2023  润新知