我正在从文本文件中读取主机信息并将其传递给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)