adb shell
私は、grep
(私のAndroidデバイスの内部grep)を使用してAndroidデバイスのローカルIPアドレスを見つけるためのプラットフォームに依存しない1行のソリューションを作成しようとしています。動作する解決策がありますが、何か問題があります。
さて、私はPowershell 7でソリューションを実行しています。違いがあればね。
これが私の解決策です。
> adb shell "ip addr show wlan0 | grep -e 'inet[^6]'"
inet 192.168.0.19/22 brd 192.168.3.255 scope global wlan0
それはうまくいきますが、フィルタリングのための文字クラスとして使用することはできません\d
。
私が好む解決策はIPアドレスだけを表示し、他のものは表示しないことです。これが私ができる最善です:
> adb shell "ip addr show wlan0 | grep -o '^ inet [0-9][0-9][0-9].[0-9][0-9][0-9].[0-9]'"
inet 192.168.0
Androidには制限された端末設定が付属しているように見え、「toybox」を使用して一般的なbashツールをエミュレートします。しかし、それらは非常に限られており、多くの文書を提供していません。
数値文字クラスや数量子が使用できないため、行だけをフィルタリングでき、 を使用することが-o
情報を出力する唯一の方法です。したがって、私が好む解決策は実装が事実上不可能です。
この制限されたツールセットを使用してローカルIPアドレスを抽出するにはどうすればよいですか?
答え1
式の一部ではgrep
なくローカルで実行できます。adb
$ adb shell "ip addr show wlan0" |
grep -o -P '^ *inet \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
inet 192.168.1.167
そこにあるオプションはを-P
意味し、エスケープをサポートするために必要--perl-regexp
です\d
。
awk
次の組み合わせを使用することもできますcut
。
$ adb shell "ip addr show wlan0 | awk '\$1 == \"inet\" {print \$2}' | cut -f1 -d/"
192.168.1.167
$1
ローカルシェルがローカルに拡張されるのを防ぐために、そこには多くの出口があります。
またはgrep
などの既存のツールを忘れて、awk
JSONと次のようにしてくださいjq
。
$ adb shell "ip -j addr show wlan0" | jq -r '.[]|select(.ifname).addr_info[]|select(.family=="inet").local'
192.168.1.167