😓

【zsh】ipv6をターミナルで簡単に取得したい!

2021/01/14に公開

初書:2021/1/14

前書き

google analyticsを使用していると必然的に必要になるipv6。[1]

ipv6を固定できればいいものの、そんな訳にはいかず、結構な頻度で更新されます。
なので、定期的に更新されるipv6をターミナルから取得しようという次第。

まずは普通に取得する

次のコマンドを叩くだけです。

% ifconfig

すると、ずらーっと出てきますが、この中のen0inet6の一番下のやつです。
もし端末によって違ったらそれぞれ合わせてください、、

一応外部からみた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行を追加です。

.zshrc
# (前略)
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

調べてみると、クォーテーションの問題があるそうです。
という事で、シングルとダブルを入れ替えます

.zshrc
alias @ipv6='ifconfig en0 | awk "/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }"'

しかし、これでもだめ。
もしかして?と思い、中のダブルクォーテーションもシングルクォーテーションに。
ただ単純なエスケープ方法では無いようです。:bash&zshでシングルクォートのエスケープ - ボクノス

.zshrc
alias @ipv6='ifconfig en0 | awk '\''/inet6 .* prefixlen 64 autoconf temporary/ { print $2 }'\'''

これで再び実行してみると、無事にipv6のところだけ取得できました!

終わりに

エイリアス作成が結構大変で時間がかかった。。
この先エイリアス作成する事もあると思うので、忘備録です。

その他参考サイト

設定したエイリアスを確認するコマンド - Qiita

脚注
  1. 自分のアクセスを除外する方法として、ipv6を用いた除外ができるので、それを使用しています。 ↩︎

  2. 追加する詳しい説明は要らない…ですよね、誰か他の人に説明を任せます ↩︎

Discussion