【zsh】ipv6をターミナルで簡単に取得したい!
初書:2021/1/14
前書き
google analyticsを使用していると必然的に必要になるipv6。[1]
ipv6を固定できればいいものの、そんな訳にはいかず、結構な頻度で更新されます。
なので、定期的に更新されるipv6をターミナルから取得しようという次第。
まずは普通に取得する
次のコマンドを叩くだけです。
% ifconfig
すると、ずらーっと出てきますが、この中のen0
のinet6
の一番下のやつです。
もし端末によって違ったらそれぞれ合わせてください、、
一応外部からみたipv6の確認ページも置いておきます。あなたの IPv6 をテストしましょう。
で、毎回これを探すのは面倒だし上のページを保存しておく方が早いので、効率化します。
ipv6のところだけ切り取る
参考サイト:macOS で自分のプライベート IP アドレスを見つける方法 - yu8mada
の、一番下の方に、ipv4の切り取りコマンドが載っています。
% ifconfig en0 | awk '/inet / { print $2 }'
awk
というコマンドを使用する事で、切り取ることができる様子。という事で、応用しましょう。
/inet /
は正規表現により検索をかけているため、ipv6ではどのような記述になっているか確認です。
(略)
inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX prefixlen 64 deprecated autoconf temporary
inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX prefixlen 64 deprecated autoconf temporary
inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX prefixlen 64 autoconf temporary
(略)
おそらくこんな感じかと。最後の1行を切り取ってきたいので、/inet6 .* prefixlen 64 autoconf temporary/
を使用するのが良さそうです。
という事で、次のコマンドを実行します
% ifconfig en0 | awk '/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }'
XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
綺麗に切り取れました。これで完成です。
ショートカット化する
別にこれでいいのですが、コマンドが長いのでエイリアスを作成しましょう。
.zshrcに書き加える事で可能です。[2]
今回は、@ipv6
というコマンドで登録する事にします。
次の1行を追加です。
# (前略)
alias @ipv6="ifconfig en0 | awk '/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }'"
追加できたところで、早速実行してみましょう。
% exec $SHELL -l (<- リロード)
% @ipv6
inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX prefixlen 64 autoconf temporary
・・・あれ?さっきは切り取れたはずが今回は全部出力されました。
シェルのエイリアスで環境変数を使うときはクォーテーションに気をつけよう - Qiita
調べてみると、クォーテーションの問題があるそうです。
という事で、シングルとダブルを入れ替えます
alias @ipv6='ifconfig en0 | awk "/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }"'
しかし、これでもだめ。
もしかして?と思い、中のダブルクォーテーションもシングルクォーテーションに。
ただ単純なエスケープ方法では無いようです。:bash&zshでシングルクォートのエスケープ - ボクノス
alias @ipv6='ifconfig en0 | awk '\''/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }'\'''
これで再び実行してみると、無事にipv6のところだけ取得できました!
終わりに
エイリアス作成が結構大変で時間がかかった。。
この先エイリアス作成する事もあると思うので、忘備録です。
Discussion