確認環境
PC | Thinkpad X1 Carbon 2nd Gen |
OS | FreeBSD 12.0-RELEASE-p5 |
w3m | w3m version w3m/0.5.3+git20190105 |
wget | GNU Wget 1.20.3 built on freebsd12.0. |
課題
日本語のman
が読みたい。
対策
きっと、ja-man
をインストールするのが一般的だと思う。
しかしここでは、こちらのサイトで提供されている日本語マニュアル検索サービス(以降、サービス)を、コマンドラインから利用するシェルスクリプトを作ってみる。
このスクリプトには、非標準コマンドであるwget
とw3m
を利用する。
メリットとしては、w3m
でリンクが貼られている他のマニュアルページへ楽々アクセスできる。
また、他のバージョンのドキュメントも読めちゃう。
以下について説明する。
- シェルスクリプトの使用例
wget
とw3m
のインストール- コード
1. シェルスクリプトの使用例
普通にマニュアルを読む
man
のように引数に読みたい項目の名前を指定する。
> jm freebsd-version
セクションを指定して読む
man
コマンド同様、セクション番号の指定もできる。
> jm 2 read
バージョンを指定して検索
man
を読みたいFreeBSDのバージョンも指定できる。
以下は、FreeBSDバージョン10.2
のsed
のマニュアルを読む例。
> jm -v 10.2 sed
2. wgetとw3mのインストール
もし、wget
とw3m
をインストールしていない場合は、下記コマンドでインストールしておこう。
(root権限で実行してね)
> pkg install wget ja-w3m
3. コード
今回作成したシェルスクリプトはこちら。
処理の流れとしては、下記となっている。
- オプション・引数からクエリを作成
wget
でサービスにクエリを送り、結果を一時ファイルに保存sed
でマニュアルの内容でないページ冒頭部分を削除w3m
でマニュアルを表示- 一時ファイルを削除
wget
の-k
オプションは、ダウンロードしていない他ページへのリンクを、相対パスから絶対パスに変換してくれる。
これで他のマニュアルページにも楽々アクセスできる。
(sedで削除しているページ冒頭部分はアクセス先では表示されちゃうけど)
作成したスクリプトは、パスの通ったディレクトリ(echo $PATHで確認)に置くことと、実行権限を追加(chmod +x ファイル名)することをお忘れなく。
補足1) 記号の指定について
下記のように記号指定しちゃうとエラーになっちゃうみたい。
素直にtest
を指定しましょう。
> jm [ # NG > jm test # OK
記号のページなんて、[
くらいだと思っている。
補足2) 指定できるバージョンについて
コードの14〜32行目に記載しているバージョンを指定可能。
このヒアドキュメント行をgrep
で検索して、最初にマッチした行を対象バージョンとして表示する。
バージョンが増えたらここに追加すればいいだけ。
GetManVer(){ cat <<- VEREND | grep "^$1" | head -n 1 13.0.2 12.1.2 12.0.2 11.3.2 11.2.2 11.1.2 11.0.2 10.5.2 10.4.2 10.3.2 10.2.2 10.1.2 10.0.2 9.4.2 9.3.2 9.2.2 9.1.2 9.0.2 8.4.2 VEREND }
例えば、-v 12
と指定した場合、一番最初に12
にマッチする12.1.2
が対象バージョンとなる。
もし、デフォルトのバージョンを変えたい場合は、コードの39行目の下記変数に指定してね。
VERSION=12.0.2
ちなみに、grep
の-m
オプションを使えば、head -n 1
は要らない。
ただ、POSIXのマニュアルには無さそうだったので、今回は使っていない。
あーPOSIXのマニュアルも日本語版が欲しい。。
補足3) apropos / whatis について
サービスのUIを見た感じ、man
の-f
や-k
オプションみたいなキーワードによる検索もできそう。
コードの66行目のcmd=
に、f
かk
を指定すれば良さげ。
wget -k -q -O "$TMP_FILE" "${BASE_URL}${FIX_QUERY}&cmd=${CMD}&man=${TARGET}&dir=jpman-${VERSION}%2Fman§=${SECTION}"
なのだけれども、firefox
などのWebブラウザから操作しても現状は動いているようには見えない。。。
ひとまず現状のコードでは、常にman
ページを開くように$CMD
に空文字を指定している。
最後に
いくつか課題はあるものの、実用には事足りると思っている。
ネットにつないでないと使えないとか、サービスが終了したら使えなくなるリスクとかはあるけど、まぁ使えるうちはありがたく使わせて頂きましょ。
とにかく、母国語である日本語で情報が読めるって幸せ。
日本語万歳。
参考
以上。