2

I found a nice little script which iterates through a couple of manuals for a specific command. As a last resort, it will Google it and open a browser window. Source here: http://www.commandlinefu.com/commands/view/7581/rtfm-function

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

The problem is, if I search for a manual which matches a builtin command partly, this will be found and displayed, not the actual command. Example:

rtfm tr

will find and display the help for the trap command which is clearly not what I am looking for.

Thus, how to prevent the help command from finding commands which don't exactly match the command I'm looking for? Is it even possible to do this?

antibus
  • 123

2 Answers2

2

Test what kind of command the argument is. This has the added benefit of correctly detecting aliases and functions that might shadow external commands.

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
}
Evgeny
  • 5,476
-1

Since help is the only one of the commands that works with partial matches, you can just invert the order of the commands:

rtfm() { "$@" -h || "$@" --help || man "$@" ||
         help "$@ "|| xdg-open "http://www.google.com/search?q=$@"; }
terdon
  • 242,166
  • But that will show the man page instead of the help for the builtin if a builtin has the same name as an external utility. – Gilles 'SO- stop being evil' Apr 30 '15 at 20:49
  • @gilles yes, but the OP's version would show the help and not the man page. Granted, a more sophisticated approach like the one in your answer is better, but this will serve for most cases since the vast majority of commands are not builtins. – terdon May 01 '15 at 10:47
  • @terdon What proportion of commands are builtins is irrelevant, since help wouldn't work on the ones that aren't anyway. It's only for names that both have a man page and are a builtin that the order matters, and then help is preferable. – Gilles 'SO- stop being evil' May 01 '15 at 15:21