• Publicidad

Autocompletado de perldoc en línea de comandos Bash

¿Tienes algo interesante que decir? ¿O quizá algo no tan interesante? Aquí tenemos un espacio para compartir todo lo que queramos decir y que no cabe en ninguno de los otros foros.

Autocompletado de perldoc en línea de comandos Bash

Notapor explorer » 2011-07-24 11:04 @502

Para aquellos de ustedes que trabajan en entornos de líneas de comandos con el shell Bash, saben que desde hace unos años existe la posibilidad de agregar completado de comandos y argumentos en el momento de escribir el comando, con tan solo pulsar la tecla TAB.

Así, es posible completar los nombres de los ficheros, directorios, servidores, recursos externos, opciones de programas importantes (como apt-get, por ejemplo).

Ahora tenemos una posibilidad más: la de autocompletar el comando perldoc, incluido con cada distribución estándar de Perl.

Ya saben que perldoc saca la documentación de Perl, tanto de la documentación oficial como de las páginas de manual de los módulos y distribuciones. Lo que ahora se trata es de facilitar aún más la búsqueda de los términos que deseamos consultar.

El proceso de instalación es muy sencillo. El primer paso es copiar este programa Perl en cualquier ruta conocida por nuestra variable de entorno PATH. En mi caso, lo he guardado en ~/bin/ (la carpeta bin/ de mi directorio $HOME). Y le damos permisos de ejecución, con chmod 755. El segundo paso consiste en agregar la siguiente línea a .bashrc (o en cualquier otro bashrc que se ejecute en el login del usuario):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
complete -C perldoc-complete -o nospace -o default perldoc
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Opcionalmente, también podrías crear un alias llamado pod, que realice la misma tarea que perldoc:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
alias pod=perldoc
complete -C perldoc-complete -o nospace -o default pod
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Y ya está. La próxima vez que entremos en el sistema, ya estará funcionando el autocompletado.

Hacemos una prueba. Escribo en la línea de comandos 'pod M' y pulso dos veces la tecla TAB. En la pantalla aparece
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~> pod M
  2. Mail::     Memoize    MIME::     MLDBM::    Module::   Moose::    Mouse      MP3::      
  3. Math::     Memoize::  MLDBM      Modern::   Moose      MooseX::   Mouse::    MRO::      
  4. explorer@casa:~> pod M
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Salen todos los módulos instalados en mi sistema que empiezan por la 'M'.

Ahora, si escribo 'pod -f bin' y pulso dos veces TAB, sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~> pod -f bin
  2. bind     binmode  
  3. explorer@casa:~> pod -f bin
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Salen las dos funciones de Perl que comienzan por 'bin'.

Naturalmente, si solo escribo 'pod' y pulso dos veces la tecla TAB, salen todos los comandos que empiezan por 'pod':
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~> pod
  2. pod         pod2latex   pod2man~    pod2usage   pod_cover   podselect  
  3. pod2html    pod2man     pod2text    podchecker  podlint     podtidy    
  4. explorer@casa:~> pod
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
porque es Bash quien está autocompletando para encontrar cualquier comando que empiece por pod'. Pero... si en lugar de eso escribo 'pod ', y pulso dos veces TAB (nótese el espacio en blanco que le sigue. Bash ahora sabe que se trata del comando 'pod' y que le estamos pidiendo que autocomplete el resto), sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~> pod
  2. Display all 301 possibilities? (y or n)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Antes de sacarnos todas las combinaciones, Bash nos avisa de que son ¡un motón! Pulsamos 'y' y salen todas las distribuciones. Los documentos perl* están resumidos en una sola entrada: perl* (174 hidden).

Lo mismo pasa si escribimos 'pod -f ' (lo mismo: hay un espacio en blanco al final) y pulsamos dos veces TAB: sale una lista con todas las funciones posibles de Perl (aquí, las de mi Perl v5.12.3):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~> pod -f
  2. Display all 218 possibilities? (y or n)
  3. abs               endnetent         getprotobynumber  lstat             read              setpwent          telldir
  4. accept            endprotoent       getprotoent       m                 readdir           setservent        tie
  5. alarm             endpwent          getpwent          map               readline          setsockopt        tied
  6. atan2             endservent        getpwnam          mkdir             readlink          shift             time
  7. bind              eof               getpwuid          msgctl            readpipe          shmctl            times
  8. binmode           eval              getservbyname     msgget            recv              shmget            tr
  9. bless             exec              getservbyport     msgrcv            redo              shmread           truncate
  10. break             exists            getservent        msgsnd            ref               shmwrite          uc
  11. caller            exit              getsockname       my                rename            shutdown          ucfirst
  12. chdir             exp               getsockopt        next              require           sin               umask
  13. chmod             fcntl             glob              no                reset             sleep             undef
  14. chomp             fileno            gmtime            oct               return            socket            unlink
  15. chop              flock             goto              open              reverse           socketpair        unpack
  16. chown             fork              grep              opendir           rewinddir         sort              unshift
  17. chr               format            hex               ord               rindex            splice            untie
  18. chroot            formline          import            our               rmdir             split             use
  19. close             getc              index             pack              s                 sprintf           utime
  20. closedir          getgrent          int               package           say               sqrt              values
  21. connect           getgrgid          ioctl             pipe              scalar            srand             vec
  22. continue          getgrnam          join              pop               seek              stat              wait
  23. cos               gethostbyaddr     keys              pos               seekdir           state             waitpid
  24. crypt             gethostbyname     kill              print             select            study             wantarray
  25. dbmclose          gethostent        last              printf            semctl            sub               warn
  26. dbmopen           getlogin          lc                prototype         semget            substr            write
  27. defined           getnetbyaddr      lcfirst           push              semop             symlink           -X
  28. delete            getnetbyname      length            q                 send              syscall           y
  29. die               getnetent         link              qq                setgrent          sysopen          
  30. do                getpeername       listen            qr                sethostent        sysread          
  31. dump              getpgrp           local             quotemeta         setnetent         sysseek          
  32. each              getppid           localtime         qw                setpgrp           system            
  33. endgrent          getpriority       lock              qx                setpriority       syswrite          
  34. endhostent        getprotobyname    log               rand              setprotoent       tell              
  35. explorer@casa:~> pod -f
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Desde luego, una herramienta muy útil para localizar información.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Volver a Pasando el rato

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron