通用 help/man 命令:帮助内置部分匹配

通用 help/man 命令:帮助内置部分匹配

我发现了一个很好的小脚本,它迭代了几个特定命令的手册。作为最后的手段,它会谷歌搜索并打开浏览器窗口。来源在这里: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=$@"; }

相关内容