Glide Note

glidenote's blog

netstatの代替品ssコマンドのzsh補完関数を作った

前回はサブコマンドとファイル名を手抜き補完に続いて 今回はssコマンドの補完関数を作成しました。

作成したものはgithubにも公開してます。

事の発端

twitterを見ていて、下記のようなtweetを発見。

  • 確かに自宅サーバのFedora16でman netstatを見てみるとそんなような事が書いてあるThis program is obsolete. Replacement for netstat is ss. Replacement for netstat -r is ip route. Replacement for netstat -i is ip -s link. Replacement for netstat -g is ip maddr.
  • ssを使ってみる。なかなか良い感じ
  • zshでオプション補完されないし、使い方もよく分からん
  • 補完関数を作ろう

という感じで、ssコマンドの補完関数作成に着手。

ssコマンドのオプションを確認

補完関数を作成する前に、まずss -hなどでどんなオプションがあるのかを確認。 サブコマンドはなく、非常にシンプルな利用方法です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don't resolve service names
   -r, --resolve       resolve host names
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes      show process using socket
   -i, --info           show internal TCP information
   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE      Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

完成形

ssのようにオプションだけしかない場合は、定型フォーマットで書いていくだけです。
出来上がった_ss$fpathにおいてexec $SHELLで利用出来るようになります。
またzsh補完関数にはcompletion-style-guideという 書式スタイルのガイドがあるので、それに従った形で書いています。

参考URL

Comments