Finalización de la línea de comandos - Command-line completion

Ejemplo de finalización de la línea de comandos en Bash .
Ejemplo de finalización de la línea de comandos en PowerShell con Intellisense .

La finalización de la línea de comandos (también la finalización de tabulaciones ) es una característica común de los intérpretes de línea de comandos , en la que el programa completa automáticamente los comandos parcialmente escritos.

Los intérpretes de línea de comandos son programas que permiten al usuario interactuar con el sistema operativo subyacente escribiendo comandos en un símbolo del sistema mediante una interfaz de línea de comandos (CLI), en contraste con apuntar y hacer clic con el mouse en una interfaz gráfica de usuario (GUI). La finalización de la línea de comandos permite al usuario escribir los primeros caracteres de un comando, programa o nombre de archivo y presionar una tecla de finalización (normalmente Tab ↹) para completar el resto del elemento. A continuación, el usuario presiona Returno ↵ Enterpara ejecutar el comando o abrir el archivo.

La finalización de la línea de comandos es útil de varias maneras, como se ilustra en la animación que acompaña a este artículo. Los comandos a los que se accede habitualmente, especialmente los que tienen nombres largos, requieren menos pulsaciones de teclas para alcanzarlos. Los comandos con nombres de archivo largos o difíciles de escribir se pueden ingresar escribiendo los primeros caracteres y presionando una tecla de finalización, que completa el comando o el nombre del archivo. En el caso de múltiples finalizaciones posibles, algunos intérpretes de línea de comandos, especialmente shells de Unix, enumerarán todas las finalizaciones posibles comenzando con esos pocos caracteres. El usuario puede escribir más caracteres y presionar Tab ↹nuevamente para ver una nueva lista reducida si los caracteres escritos aún son ambiguos, o de lo contrario completar el comando / nombre de archivo con un espacio al final. Una forma alternativa de completar rota a través de todos los resultados coincidentes cuando la entrada es ambigua.

Los elementos completables pueden incluir comandos, argumentos, nombres de archivos y otras entidades, según el intérprete específico y su configuración. La finalización de la línea de comandos generalmente solo funciona en modo interactivo . Es decir, no se puede invocar para completar comandos parcialmente escritos en scripts o archivos por lotes , incluso si la finalización no es ambigua. La finalización de la pestaña de nombre proviene del hecho de que la finalización de la línea de comandos a menudo se invoca presionando la tecla de tabulación .

Historia

La finalización de tabulación apareció temprano en la historia de la computación; Uno de los primeros ejemplos apareció en el Berkeley Timesharing System para SDS 940 , donde si una cadena escrita fuera ambigua, el intérprete no haría nada, pero si la cadena no era ambigua, la completaría automáticamente sin ningún comando del usuario. Esta característica no funcionó bien con los errores tipográficos demasiado frecuentes , por lo que fue una bendición mixta. Esta característica fue imitada por los desarrolladores de Tenex que hicieron un cambio importante: Tenex usó "reconocimiento de escape", en el cual el intérprete no intentaría autocompletar a menos que el usuario oprima la tecla de escape (de ahí el nombre). El dominio también se expandió de solo nombres de programas en el sistema de Berkeley a nombres de programas y archivos en Tenex. El descendiente de Tenex, TOPS-20, trasladó la finalización de la línea de comandos del intérprete de comandos al sistema operativo a través de la llamada al sistema COMND JSYS, para que esté disponible para otras aplicaciones de usuario. De allí fue tomado prestado por Unix.

Ejemplo

Para abrir el archivo Introduction-to-Command-Line-Completion.html con Firefox, se debe escribir:

 firefox introduction-to-command-line-completion.html

Este es un comando largo para escribir. En su lugar, podemos usar la finalización de la línea de comandos.

Solicitando finalización

El siguiente ejemplo muestra cómo funciona la finalización de la línea de comandos en Bash . Otros shells de línea de comando pueden funcionar de manera ligeramente diferente.

Primero escribimos las primeras tres letras de nuestro comando:

 fir

Luego presionamos Tab ↹y debido a que el único comando en nuestro sistema que comienza con "fir" es "firefox", se completará para:

 firefox

Luego comenzamos a escribir el nombre del archivo:

 firefox i

Pero esta vez, la introducción-a-la-línea-de-comandos-completación.html no es el único archivo en el directorio actual que comienza con "i". El directorio también contiene los archivos Introduction-to-bash.html e Introduction-to-firefox.html . El sistema no puede decidir cuál de estos nombres de archivo queríamos escribir, pero sabe que el archivo debe comenzar con "introducción a", por lo que el comando se completará para:

 firefox introduction-to-

Ahora escribimos "c":

 firefox introduction-to-c

Después de presionar Tab ↹, se completará con el nombre completo del archivo:

 firefox introduction-to-command-line-completion.html

En resumen, escribimos:

 firTab ↹iTab ↹cTab ↹

Esto es solo ocho pulsaciones de teclas, que es considerablemente menos de 52 pulsaciones de teclas que hubiéramos necesitado escribir sin usar la finalización de la línea de comandos.

Terminación rotativa

El siguiente ejemplo muestra cómo funciona la finalización de la línea de comandos con la finalización rotatoria, como los usos de CMD de Windows .

Seguimos el mismo procedimiento que para solicitar la finalización hasta que tengamos:

 firefox i

Presionamos Tab ↹una vez, con el resultado:

 firefox introduction-to-bash.html

Pulsamos de Tab ↹nuevo, obteniendo:

 firefox introduction-to-command-line-completion.html

En resumen, escribimos:

 firTab ↹iTab ↹Tab ↹

Esto es solo siete pulsaciones de teclas, comparable a la finalización de estilo de indicaciones. Esto funciona mejor si sabemos por qué posibilidades rotará el intérprete.

Finalización en diferentes interfaces de línea de comandos

  • Los shells de Unix , incluido Bash (el shell predeterminado en la mayoría de las distribuciones de Linux ) y ksh, entre muchos otros, tienen una larga tradición de capacidades de finalización avanzadas y personalizables.
    • La finalización programable Bashcomplete y los compgencomandos han estado disponibles desde la versión beta de 2.04 en 2000 y ofrecen al menos la finalización de nombre de ruta y nombre de archivo.
    • Para los usuarios de KornShell, la finalización del nombre del archivo depende del valor de la variable EDITOR. Si se establece en EDITOR VI, teclea parte del nombre, y luego Escape, \. Si EDITOR se establece en Emacs , teclea parte del nombre, y luego Escape, Escape.
    • El shell Z (zsh) fue pionero en el soporte para la finalización totalmente programable, lo que permite a los usuarios hacer que el shell complete automáticamente los parámetros de varios comandos no relacionados con el shell en sí, lo que se logra cebando el shell con las definiciones de todos los conmutadores conocidos, así como los correspondientes. tipos de parámetros. Esto permite al usuario, por ejemplo, escribir tar xzf Tab ↹ }} y hacer que el shell complete solo archivos gzip con tar del sistema de archivos real, omitiendo los archivos que son incompatibles con los parámetros de entrada. Una instalación moderna de zsh viene con definiciones de finalización para más de quinientos comandos.
    • Tcsh ofrece la finalización predeterminada de archivos, comandos y nombres de variables que se activan con Tab ↹. El comando incorporado 'completo' proporciona una finalización totalmente programable. El código fuente viene con un archivo 'complete.tcsh' que contiene muchos ejemplos de su sintaxis de finalización.
  • Windows PowerShell , el shell de comandos extensible de Microsoft, que se basa en la programación orientada a objetos y el marco de Microsoft .NET , proporciona capacidades de finalización potentes y personalizables similares a las de los shells tradicionales de Unix.
  • El procesador de comandos cmd.exe de los sistemas basados ​​en Windows NT admite la finalización básica. Es posible utilizar un enlace de clave independiente solo para los nombres de directorio coincidentes.
  • cmd.exe / F: ON habilita los caracteres de finalización de nombres de archivos y directorios (^ F y ^ D de forma predeterminada). Utilice cmd.exe /? para más información.
  • TweakUI se puede utilizar para configurar las claves utilizadas para completar el nombre del archivo y el nombre del directorio.
  • El procesador de comandos de MS-DOS COMMAND.COM no completó la línea de comandos: presionar la tecla de tabulación solo haría avanzar el cursor . Sin embargo, varios shells mejorados para MS-DOS, como 4DOS , la versión FreeDOS de COMMAND.COM o Enhanced DOSKEY.COM cuentan con finalización de pestañas estilo Unix.
  • Far Manager, además de sus funciones de administración de archivos, proporciona historial de comandos y finalización de línea para Windows.

Ver también

Referencias

enlaces externos

Shells de Unix

Intérpretes de comandos de Windows

(Asegúrese de consultar la sección "Se aplica a" en cada artículo)