ターミナルからPOSIXコマンドのマニュアルを表示する

コマンドのPOSIX仕様のみを表示する man コマンド、 pman (ピーマン)を作りました。

スクリプト

#!/bin/sh
# Manual for POSIX
# requirements: w3m

usage() {
	cat <<- EOF
	Usage: $0 [entry]
	EOF
}

# Check conditions before executing
command -v w3m &>/dev/null || { echo "w3m required."; exit 1; }
[ $# -eq 0 ] && { usage; exit 1; }

# Variable definition
cols=$(stty size | cut -f2 -d\ ) # ** "stty size" is not POSIX **
url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/$1.html"

# Search and display manual
w3m -M -cols ${cols:-80} -no-cookie "$url" | less

上の内容で pman というファイルを作ったらパス配下において

chmod a+x /path/to/pman

動作

$ pman awk などのように使います。

$ pman awk の表示

カラクリは非常に簡単で、 OpenGroupが運営しているPOSIXリファレンス(https://pubs.opengroup.org/onlinepubs/9699919799/)の各コマンドページをリクエストして表示しているだけです。

pman はCLIブラウザアプリケーションの w3m を使用しています。
最初は curlwget を考えましたが、残念ながら "Accept: text/plain" ヘッダーをつけたり .txt ファイルを探してもダメだったので、HTMLをCLI向けに解釈してくれる w3m を採用しました。

元々POSIXリファレンスサイト の表示がマニュアルらしくなっているのも相まって、いかにも普段叩いている man っぽい表示になっていますね。

w3m は通常横幅いっぱいに表示してくれますが、より man のページングに近づけるために less を通すと横幅の文字数が固定されてしまうため、 stty コマンドの出力から行幅を抽出してパラメータに渡しています($colums 変数)。
ただここはPOSIXではないので要注意(一応GNUとBSDで確認してます)。

まとめ

これでPOSIXコマンドの実装依存に悩まされる機会が少しでも減りますように…!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です