失敗したSSHホストをアレイから削除します。

失敗したSSHホストをアレイから削除します。

「s」と「localhot」が最終ホストのリストに残っている理由を説明できる人はいますか?

「s」は削除されましたが、まだ残っています。

$ HOSTLIST="localhost sdfsd sdfs s fsdf localhost sdfs fsdf sdf 127.0.0.1"
$ for h in ${HOSTLIST};do { timeout 3 bash -c "</dev/tcp/${h}/22" 2>/dev/null; } || { echo removing $h from HOSTLIST;HOSTLIST=${HOSTLIST[@]/${h}}; };done ; echo final HOSTLIST :: ${HOSTLIST}
removing sdfsd from HOSTLIST
removing sdfs from HOSTLIST
removing s from HOSTLIST
removing fsdf from HOSTLIST
removing sdfs from HOSTLIST
removing fsdf from HOSTLIST
removing sdf from HOSTLIST
final HOSTLIST :: localhot s localhost 127.0.0.1
$
$ telnet s 22
telnet: s: Name or service not known
s: Host name lookup failure
$ telnet localhot 22
telnet: localhot: Name or service not known
localhot: Host name lookup failure
$

ベストアンサー1

削除時に文字列のs最初の項目を削除します。これはおそらく削除したいものではありません(出力の通知)。s$HOSTLISTslocalhot

アレイを使用し、良いホストアレイを構成する方が良いです。

hostlist=( localhost sdfsd sdfs s fsdf localhost sdfs fsdf sdf 127.0.0.1 )

for h in "${hostlist[@]}"; do
    if timeout 3 bash -c "</dev/tcp/$h/22" 2>/dev/null; then
       ok+=( "$h" )
    fi
done

printf 'Ok host: %s\n' "${ok[@]}"

おすすめ記事