zoukankan      html  css  js  c++  java
  • 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命令的输入
  • 相关阅读:
    Android(一)
    git
    UBuntu18.04 配置环境
    TensorRT Development document (Python)
    继续
    tensorRT C++ API
    tensorRT 与yolov3_tiny
    浅谈PHP进程管理
    nginx 平滑重启的实现方法
    fast-cgi & php-fpm 等的理解 (讨论试理解)
  • 原文地址:https://www.cnblogs.com/dachenzi/p/8031959.html
Copyright © 2011-2022 走看看