1

bash 統合の場合、インターフェイスからデフォルト ゲートウェイを取得する必要があります。

コマンド route -n の出力は次のとおりです。

Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         p.p.p.p         128.0.0.0       UG    0      0        0 tun0
0.0.0.0         x.x.x.x         0.0.0.0         UG    100    0        0 eth0
10.43.0.1       10.43.0.5       255.255.255.255 UGH   0      0        0 tun0
10.43.0.5       0.0.0.0         255.255.255.255 UH    0      0        0 tun0
y.y.y.y         x.x.x.x         255.255.255.255 UGH   0      0        0 eth0
x.x.x.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
128.0.0.0       10.43.0.5       128.0.0.0       UG    0      0        0 tun0

Iface tun0 のゲートウェイ (フランス語で Passerelle) をキャプチャしようとしています。

この正規表現は、Rubular で動作しています。

^[0\.]+\s+([\w\.]+)\s+.*UG.*tun0$

しかし、このシェル コマンドは機能しません (出力なし)。

route -n |egrep -oh '^[0\.]+\s+([\w\.]+)\s+.*UG.*tun0$'

どうしてか言ってくれない ?

4

3 に答える 3

2

awkグロテスクな正規表現ではなく、単に , を使用しないのはなぜですか? 何かのようなもの:

route -n | grep -e 'UG.*tun0' | awk '{print $2}'

免責事項:私はこれをテストしていないので、タイプミスがあるかもしれません...

于 2013-09-28T16:48:26.733 に答える
1

これを試してください(パイプは1つだけ):

route -n | 
    awk -viface=eth0 '{if ($1 == "0.0.0.0" && $8 == iface) {print $2;exit}}'

またはさらに良い:

ip route |
    awk -viface=eth0 '{
        if ($1 == "default" && $2 == "via" && $5 == iface) {print $3; exit}
    }'
于 2013-09-28T16:51:44.333 に答える
0

正規表現と awk を使用しない別のオプション:

route -n | grep -E "ppp0$" | tr -s ' ' | cut -f 2 -d ' '
于 2013-09-28T16:54:45.097 に答える