一般的なhelp / manコマンド:ヘルプの組み込み部分の一致

一般的なhelp / manコマンド:ヘルプの組み込み部分の一致

いくつかの特定のコマンドのドキュメントを繰り返す素晴らしい小さなスクリプトを見つけました。最後の手段としてGoogleで検索してブラウザウィンドウを開きます。ソースはこちら:http://www.commandlinefu.com/commands/view/7581/rtfm-function

rtfm() { help $@ || $@ -h || $@ --help || man $@ || xdg-open "http://www.google.com/search?q=$@"; }

問題は、組み込み命令と部分的に一致するマニュアルを検索すると、実際の命令の代わりにマニュアルが見つけて表示されるという点だ。例:

rtfm tr

trap明らかに、私が探しているものではなく、コマンドに関するヘルプを見つけて表示します。

helpそれでは、私が探しているコマンドとまったく一致しないコマンドを見つけるのを防ぐことができますか?これは可能ですか?

答え1

パラメータがどのタイプのコマンドであるかをテストします。これには、外部コマンドを非表示にするエイリアスと機能を正しく検出できるという利点があります。

rtfm () {
  declare x
  for x; do
    case $(type -t "$x") in
      alias) alias "$x";;
      keyword) LESS="$LESS+/^SHELL GRAMMAR" man bash;;
      function) type "$x";;
      builtin) help "$x";;
      file)
        man -S 1,8 "$x" ||
        "$x" --help ||
        xdg-open "http://www.google.com/search?q=$x";;
      '') # no such command
        man "$x" ||
        xdg-open "http://www.google.com/search?q=$x";;
    esac
  done
}

答え2

helpこれは部分一致で機能する唯一のコマンドなので、コマンドの順序を変更できます。

rtfm() { "$@" -h || "$@" --help || man "$@" ||
         help "$@ "|| xdg-open "http://www.google.com/search?q=$@"; }

関連情報