Bash while循环只在body包含ssh时迭代一次

rol*_*and 6 ssh bash

我正在从文本文件中读取主机信息并将其传递给ssh命令:文本文件包含ssh命令的主机,用户和密码

while read LINE
do
    R_USER=$(echo $LINE | cut -d ',' -f 1)                  
    R_HOST=$(echo $LINE | cut -d ',' -f 2)                                  
    PY_SCRIPT=$(echo $LINE | cut -d ',' -f 4)               

    ssh $R_USER@$R_HOST 'touch /home/user/file_name.txt'

done </path_name/file_name
Run Code Online (Sandbox Code Playgroud)

事实证明,即使主机文本文件包含多个主机信息,while循环也只执行一次.当我删除ssh命令时,while循环的执行次数与主机信息文本文件中的行数一样多.

不知道为什么会这样.关于这个的任何信息?

罗兰

Jug*_*hah 17

ssh的默认标准输入处理从while循环中排出剩余的行.

要避免此问题,请更改有问题的命令从标准输入读取的位置.如果不需要将标准输入传递给命令,请从特殊/dev/null设备读取标准输入:

while read LINE
  do
    R_USER=$(echo $LINE | cut -d ',' -f 1)                  
    R_HOST=$(echo $LINE | cut -d ',' -f 2)                                  
    PY_SCRIPT=$(echo $LINE | cut -d ',' -f 4)               

    ssh $R_USER@$R_HOST 'touch /home/user/file_name.txt' < /dev/null

done </path_name/file_name
Run Code Online (Sandbox Code Playgroud)

或者,尝试使用ssh -n哪个将阻止ssh从标准输入读取.例如:

ssh -n $R_USER@$R_HOST 'touch /home/user/file_name.txt'
Run Code Online (Sandbox Code Playgroud)