それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

MacのHomeBrew環境におけるman について

homebrew いれてると man がグチャグチャ・・

brew したコマンドは無事に動くんだけど、man や completion などが結構大変。今回は man / manpath を何とかするために調べた話。

brew したgnu date の man はどこ?

BSDコマンドはLinuxメインの私には、ちょっと面食らうことが多いので、brewGNU コマンドを使っているのですが、man どこだ。。。

date の man
$ man date # BSD manual 
$ man date -M /usr/local/opt/coreutils/libexec/gnuman/ # GNU User manual

ということで、date コマンドのman は coreutils の gnuman にありました。

なぜ、見れないのか

manpath で解決しないのはナゼなのでしょうか?それは brew link してないからです。brew で link したものは、/usr/local/share/man にリンクされいつも通りに表示できました。それ以外(未link)は出てこないようです。

リンク非推奨の curl なども同じ

これらも 通常のman だけでは調べることが出来ない。

g-prefix については gつけたら見られる

上記のlink 非推奨で link 出来ないコマンドについては g-prefix をつけたらman を見ることが出来る

$ man gls
$ man grm
$ man gsed
$ man gdate
$ man ggrep
$ man gfind

ただし、それでもman が見られないものもある。

ls / date など頻繁に使うコマンドについても BSD コマンドより GNU コマンドのマニュアルをよく使うので、そっちを参照したい。

man のためだけに、いちいちlinux にログインするもの面倒だ

環境変数MANPATHに含めるしか無い。

coreutils / curl / sqlite に関しては、MANPATHで強引に解決することにした。

~/.bashrc
    MANPATH=$(manpath)
    if [[ $( realpath  $(which curl ) ) =~ local   ]] ; then 
      MANPATH=/usr/local/opt/curl/share/man:$MANPATH
    fi 
    if [[ $( realpath  $(which date ) ) =~ local   ]] ; then 
      MANPATH=/usr/local/opt/coreutils/libexec/gnuman:$MANPATH
    fi 
    if [[ $( realpath  $(which sqlite3 ) ) =~ local   ]] ; then 
      MANPATH=/usr/local/opt/sqlite/share/man:$MANPATH
    fi 
    export MANPATH

なぜ brew link --force しないのか

--forcebrew link をすれば一発解決なのですが。brew link 非推奨のコマンドはやっぱり リンクしないほうがトラブルが少ない。

過去に起きたトラブルで時間を無駄にした記憶がある。

「なんでこのコマンドはbrew インストールできない!!」 「なんでコマンド動かない!!」といったトラブルで時間を浪費したことがあり、その原因の大半が brew link --force だったのです。

まとめ

homebrew で入れたコマンドの man が見れない時

  1. g-prefix を試す. 例:ls → gls など
  2. manのパス指定を試す 例:man date -M /usr/local/opt/coreutils/libexec/gnuman/
  3. manpath を先にしておく。
  4. man コマンドでサイトに飛ぶ。 例function man(){ open https://www.die.net/search/?q=$1; }

の解決策がありそうでした。

おまけ

brew コマンドの日本語man はここにあった

takuya@~$ ll /usr/local/share/man/ja/man1/
total 44
lrwxr-xr-x 1 takuya admin 52 2016-11-28 02:08 evim.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/evim.1
lrwxr-xr-x 1 takuya admin 50 2016-11-28 02:08 ex.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/ex.1
lrwxr-xr-x 1 takuya admin 52 2016-11-28 02:06 nkf.1 -> ../../../../Cellar/nkf/2.1.4/share/man/ja/man1/nkf.1
lrwxr-xr-x 1 takuya admin 53 2016-11-28 02:06 nmap.1 -> ../../../../Cellar/nmap/7.31/share/man/ja/man1/nmap.1
lrwxr-xr-x 1 takuya admin 53 2016-11-28 02:08 rview.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/rview.1
lrwxr-xr-x 1 takuya admin 52 2016-11-28 02:08 rvim.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/rvim.1
lrwxr-xr-x 1 takuya admin 52 2016-11-28 02:08 view.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/view.1
lrwxr-xr-x 1 takuya admin 51 2016-11-28 02:08 vim.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/vim.1
lrwxr-xr-x 1 takuya admin 55 2016-11-28 02:08 vimdiff.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/vimdiff.1
lrwxr-xr-x 1 takuya admin 56 2016-11-28 02:08 vimtutor.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/vimtutor.1
lrwxr-xr-x 1 takuya admin 51 2016-11-28 02:08 xxd.1 -> ../../../../Cellar/vim/HEAD/share/man/ja/man1/xxd.1

brew コマンド man 自体はここにあった

takuya@~$ ll /usr/local/share/man/man1
total 4172