While循环中read问题

2023年4月1日 · 29 字 · 1 分钟 · shell

while read 循环问题

shell脚本中,while read 文件控制循环的时候,出现只循环一次就退出主循环的问题,后来一番搜索才发现在while主结构中有其他的命令也读取输入缓冲区,所以导致后来read已经没记录可读了。

解决办法:

  1. while read之前自行分配文件描述符

    exec 3<${readfile}
    while read -u3 xxxx
    do
    	command......
    done
    exec 3<&-
    
  2. 把也要读缓存的命令的标准输入重定向

    #例如:
    ssh xxxxxx </dev/null
    #或者
    ssh -n xxxxx