【发布时间】:2021-11-08 20:25:28
【问题描述】:
根据我在 shell 脚本中使用 while 循环的有限经验,我需要检查新公钥中的远程主机连接。
cat JOBID_LIST.txt
HLC00101 abc@gbl67543.cloud.uk.hlc
HLC01110 absit@DEU010A.cloud.uk.hlc
HLC02568 abftp@GTB19494.systems.uk.hlc
HLC02590 wbsftp@batch.mose.dev.cloud.hlc
HLC02590 cmul1u11@batch.mose.dev.cloud.hlc
HLC02648 dmlfeat@lmd-fileserver-uat.systems.uk.hlc
HLC02648 dmsftp@lmd-fileserver-uat.systems.uk.hlc
#!/bin/bash
cat JOBID_LIST.txt | while read -r JOBID SFTPHOST
do
if [[ ${JOBID} != "HLC02648" ]]; then
ssh -q -o BatchMode=yes -o StrictHostkeyChecking=no ConnectTimeout=5 "$SFTPHOST" -i xxxx.pub 'exit 0'
if [[ $? == 0 ] ; then
echo "Connect to $SFTPHOST in $JOBID in new pubkey successfully."
else
echo "Failed to connect to $SFTPHOST in $JOBID in new pubkey "
fi
else
echo "Verify Completely"
exit 2.
fi
done
由于某种原因,ssh 命令跳出了 while 循环,因此直到最后的第三个 JOBID 被忽略。 我怎样才能让它检查到文件末尾? 感谢您的建议。
【问题讨论】:
-
ssh从管道继承其标准输入。因此,它消耗了大量用于 while/read 循环的数据。
标签: shell while-loop do-while