さようなら行ってください。
/etc/resolv.conf.dnsphから抽出されたIPv6アドレスからping6を実行しようとしています。しかし、awkはIPv6アドレスを1行にまとめたようです。
$ grep ^nameserver /etc/resolv.conf.dnsph |awk '{print $2}'
2001:1890:1001:2224::1
2001:1890:1001:2424::1
$ ping6 $(grep ^nameserver /etc/resolv.conf.dnsph |awk '{print $2}')
ping6: Source routing is deprecated by RFC5095.
Usage: ping6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-l preload] [-m mark] [-M pmtudisc_option]
[-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
[-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
[-W timeout] destination
$ echo $(grep ^nameserver /etc/resolv.conf.dnsph |awk '{print $2}')
2001:1890:1001:2224::1 2001:1890:1001:2424::1
「END {printf "\n"}" を追加しても違いはありません。
$ ping6 $(awk '/^nameserver/ {print $2}; END {printf "\n"}' /etc/resolv.conf.dnsph)
ping6: Source routing is deprecated by RFC5095.
Usage: ping6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-l preload] [-m mark] [-M pmtudisc_option]
[-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
[-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
[-W timeout] destination
$ echo $(awk '/^nameserver/ {print $2}; END {printf "\n"}' /etc/resolv.conf.dnsph)
2001:1890:1001:2224::1 2001:1890:1001:2424::1
アドバイスしてください。
ビヨルン
答え1
複数のアドレスが与えられたら、宛先ping6
(最後のアドレス)に到達するためのホップとして解釈します。あなたの場合、出力を繰り返す必要があります。
for ip in $(awk '/^nameserver/ { print $2 }' /etc/resolv.conf.dnsph); do
ping6 "$ip"
done
AWK は、最初のコマンドに示すように、各 IP アドレスを 1 行に正しく出力しますが、引用符は使用しません。コマンドの置き換え改行文字が効果的に削除されます。これは単語間の区切り文字として機能します。
答え2
この$(...)
構成は、コマンドにコマンドライン引数を提供するためのものです。コマンドライン引数は改行ではなく空白で区切られているため、シェルは出力を「最適化」します。ただし、$(...)
次のように引用できます。
> echo $(echo 1;echo 2)
1 2
> echo "$(echo 1;echo 2)"
1
2
awk
問題は依然として接続線に関連していません。いいえ)、しかし$(...)
。を使用すると、実際に操作を実行したり、内部でpingを呼び出してシェルループを回避したりできますawk
。grep
awk '/^nameserver/ {print $2}' /etc/resolv.conf.dnsph
for
awk
awk '/^nameserver/ { system("ping6 " $2); }' /etc/resolv.conf.dnsph