読み取りループ中にSSHを使用してstdinから読み取り

読み取りループ中にSSHを使用してstdinから読み取り

ホスト名とIPアドレスのリストを返すシェル関数があります。

$ list_hosts
hostA 10.1.1.1
hostB 10.1.1.2
hostC 10.1.1.3

各ホストごとに異なるアドレスを取得したいと思います。

$ function list_ip6 {
  list_hosts | while read -r hostname ip ; do
    ip6=$(ssh ${ip} ip -o address list eth0 | awk '/scope global/ {print $4;}')
    echo "Host ${name} has IP6 ${ip}"
  done
}

これは、返された最初のホストのIP6のみを印刷しますlist_hosts

$ list_ip6
Host hostA has IP6 fd57:9e3a:c90e:753f:d625:ccff:feb0:7984/128

問題は、2行目のコマンド置換のようです。コメントアウトすると、すべてのホストで繰り返されます。

$ list_ip6
Host hostA has IP6
Host hostB has IP6
Host hostC has IP6

プロセス交換がスレーブの出力を読み取るのを妨げますかlist_hosts

busyboxシェルでこれを行うための良い方法はありますかash?私の場合、bash行を配列として読み込み、配列を繰り返しましたが、もちろんAshではオプションではありません。

以下を追加するように編集されました。

問題は特にssh接続にあるようです。各ホストのローカルIP6を印刷すると正常に動作します。

$ function list_ip6 {
  list_hosts | while read -r hostname ip ; do
    ip6=$(ip -o address list eth0 | awk '/scope global/ {print $4;}')
    echo "Host ${name} has IP6 ${ip}"
  done
}

$ list_ip6
Host hostA has IP6 fd57:9e3a:c90e:753f:d625:ccff:feb0:7931/128
Host hostB has IP6 fd57:9e3a:c90e:753f:d625:ccff:feb0:7931/128
Host hostC has IP6 fd57:9e3a:c90e:753f:d625:ccff:feb0:7931/128

プロセスの交換は問題ではありません。 SSHが何とかループから外れるだけです。

関連情報