comando universal help / man: ajuda com partições parciais

2

Eu encontrei um pequeno script que é repetido em alguns manuais para um comando específico. Como último recurso, ele fará o Google e abrirá uma janela do navegador. Fonte aqui: link

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

O problema é que, se eu procurar um manual que corresponda a um comando interno, este será encontrado e exibido, não o comando real. Exemplo:

rtfm tr

encontrará e exibirá a ajuda do comando trap que claramente não é o que estou procurando.

Assim, como evitar que o comando help encontre comandos que não correspondem exatamente ao comando que estou procurando? É possível fazer isso?

    
por antibus 30.04.2015 / 12:07

2 respostas

-1

Como help é o único dos comandos que funcionam com correspondências parciais, você pode simplesmente inverter a ordem dos comandos:

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

Teste o tipo de comando que o argumento é. Isso tem o benefício adicional de detectar corretamente aliases e funções que podem sombrear comandos externos.

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
}
    
por 01.05.2015 / 01:14

Tags