fish shellのオプション解析の書き方
概要
fish shellは素晴らしくモダンなshellです。オプション解析もbashと比べると驚くほど簡単にかけます。
fish shellにはargparse
というオプション解析用のコマンドが用意されています。今回はその使い方の紹介をします。argparse
単体でも十分に便利ですが、fish_opt
というargparse
に渡すべき引数を生成する補助ツールも用意されているので、覚えることが少なく、あとからも読みやすくなっています。
argparseの使い方
以下のサンプルを見るとだいたいのことはわかると思います。
使用しているものは以下の2つです。
1行ごとにコマンドを定義できるので、読みやすく、自動で_flag_{flag}
という変数が生成されるので、手間も少ないです。
argparse
: オプション解析ツールfish_opt
: オプション解析ツールに渡すべき引数を生成するコマンド(使わなくても良い)
function main set -l options (fish_opt --short=h --long=help) set options $options (fish_opt -s a -l algo -r) set options $options (fish_opt --short=f --long=file --required-val) argparse -n mycmdname $options -- $argv or return if set -lq _flag_h echo "show help" end end main $argv
fish_optは以下のような動作を行っています。
fish_opt --short=h --long=help >>> h/help fish_opt -s a -l algo -r >>> a/algo=
なのでfish_opt
を用いずとも以下のように書くことができます。
function main argparse -n mycmdname h/help a/algo= f/file= -- $argv or return if set -lq _flag_h echo "show help" end end main $argv
ここで、=
がついていると引数を取るオプションであるという意味になります。
fish_opt
を用いる場面としては、longオプションのみを有効化したい等の細かい引数の設定をしたい場合です。
直接上のようにもかけるのですが、その書式を覚えるのが大変なのでfish_opt
を用いると便利になります。
fish_opt
を用いるとオプションの定義が自然と1行ごとになるので、個人的にはそこもメリットかと思っています。