このコマンドラインはありますが、grep
長さは2倍ですawk
ifconfig eth1 2> /dev/null | grep "inet " | awk '{gsub("addr:","",$2); print $2 }' ||
ifconfig eth0 2> /dev/null | grep "inet " | awk '{gsub("addr:","",$2); print $2 }'`
私は次の方法でこの時間を短縮しようとしました。
echo $(ifconfig eth1 2> /dev/null || ifconfig eth0 2> /dev/null) &> grep "inet " |
awk '{gsub("addr:","",$2); print $2 }'
しかし、サーバーのIPを取得しようとすると、何も返されません。エラーがある場合に情報を取得する最良の方法は何ですか?これを試して次に送信してください。grep
答え1
別のモジュラーアプローチ:bashに限定されない
get_ifconfig () {
for iface do
ifconfig "$iface" 2>/dev/null && return
done
}
get_ifconfig eth1 eth2 eth3 | sed -n 's/.*inet addr:\([0-9.]\+\).*/\1/p'
答え2
この試み:
$ ( ifconfig eth2 2>/dev/null || ifconfig eth0 2>/dev/null ) | grep ...
同じロジックを持っていますが、||
括弧内で実行されるため、成功したコマンドの出力のみgrep
。
答え3
この方法はどうですか?
$ echo eth1 eth0 | xargs -n 1 ifconfig 2>/dev/null | awk '/inet/{gsub("addr:","",$2);print $2;exit}'
192.168.124.132
$
答え4
IPv4アドレスを持つ最初のインターフェイスを取得するには、一度だけ実行してすべてのインターフェイスを表示し、ifconfig
IPv4アドレスを持つ最初のエントリを抽出します。また、で実行しているタスクをgrep
組み合わせて抽出を最適化することもできますawk
。
ifconfig -a | awk '/^[^ ]/ {iface=$1}
iface ~ /^eth/ && sub(/inet addr:/,"") {print $1; exit}'
改行文字はオプションなので、明確にするために含めました。もっと詳細なバージョンです。
ifconfig -a | awk 'sub(/inet addr:/,"") {print $1; exit}'
127.0.0.1
これはおそらく、望ましくないこのようなコンテンツ(ループバックインターフェースから)を印刷することができます。
を使用したい場合は、ip
構文解析も同様に厄介です。
ip addr | awk '/^[0-9]/ {iface=$2}
iface ~ /^eth/ && $1 == "inet" {sub(/\/.*/, "", $2); print $2}'