![通用 help/man 命令:帮助内置部分匹配](https://linux22.com/image/64081/%E9%80%9A%E7%94%A8%20help%2Fman%20%E5%91%BD%E4%BB%A4%EF%BC%9A%E5%B8%AE%E5%8A%A9%E5%86%85%E7%BD%AE%E9%83%A8%E5%88%86%E5%8C%B9%E9%85%8D.png)
我发现了一个很好的小脚本,它迭代了几个特定命令的手册。作为最后的手段,它会谷歌搜索并打开浏览器窗口。来源在这里: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=$@"; }