¿Por qué a veces aparece un mensaje ">" en el terminal?

19

Muy bien, cuando ejecuto ciertos comandos de la manera incorrecta, (mal escrito, etc.) El terminal genera esto: en >lugar de computername:workingfolder username$, y cuando escribo enter, es así:

>

>

>

Eso sería si presiono enter 3 veces.

Nombre para mostrar
fuente

Respuestas:

43

> es el mensaje de continuación predeterminado. Eso es lo que verá si lo que ingresó antes tenía comillas desequilibradas.

Como ejemplo, escriba una comilla simple en la línea de comando seguida de algunas enterteclas:

$ '
> 
> 
> 

Las indicaciones de continuación ocurrirán hasta que usted

  • (a) complete el comando con una comilla de cierre

    o

  • (b) escriba Ctrl+ Dpara finalizar la entrada, en cuyo punto el shell responderá con un mensaje de error sobre las comillas desequilibradas,

    o

  • (c) escriba Ctrl+ Cque anulará el comando que estaba ingresando.

¿Cómo es esto útil?

En algún momento, es posible que desee ingresar una cadena que contenga nuevas líneas incrustadas. Puede hacerlo de la siguiente manera:

$ paragraph='first line
> second line
> third line
> end'

Ahora, cuando mostramos esa variable de shell, puede ver que las indicaciones han desaparecido pero las nuevas líneas se mantienen:

$ echo "$paragraph"
first line
second line
third line
end
John1024
fuente
16

Eso sucederá si tiene una cotización no cerrada en su comando. Eso es algo como:

$ echo "test here
>
>
...

Puede salir de ese modo cerrando la cotización (escriba un "o ', o lo que sea su cotización abierta). También podría ser un bloque delimitado por llaves, un bucle parcialmente completo for-doo un while-dobucle, o ciertas otras construcciones. También puede presionar Ctrl-Cpara cancelar este comando (luego presione Uppara revisarlo).

Esto a veces puede suceder sin una cita obvia que falta cuando se producen expansiones de parámetros o historial donde no las esperaba.


El >es su valor PS2("solicitud secundaria"). Puede cambiar eso a otra cosa para recordarle lo que sucedió:

PS2="Unclosed >"

en su .bashrcvoluntad hará que se imprima Unclosed >al comienzo de cada línea.

Michael Homer
fuente
7

Además de las otras respuestas, también obtiene el mensaje de continuación cuando escribe un \como último carácter en una línea.

Señor lister
fuente
55
(Para mí, esto suele ocurrir por accidente, ya que la barra invertida es terriblemente cerca de la tecla Intro.)
Sr. Lister
No en mi teclado , no lo es.
TRiG
@TRiG ¿Quiere decir que a menudo escribe # por accidente en lugar de \? Correcto ...
Sr. Lister el
7

La respuesta se encuentra en esta mención críptica en el Manual de referencia de Bash :

5.1 Variables de Bourne Shell

[...]

  • PS1: La cadena de solicitud principal. El valor predeterminado es ' \s-\v\$'. Consulte Impresión de una solicitud , para ver la lista completa de secuencias de escape que se expanden antes de que PS1se muestre.
  • PS2: La cadena de solicitud secundaria. El valor predeterminado es ' >'.

... seguido de :

6.3.3 Comportamiento interactivo de Shell

  1. Bash se expande y muestra PS1antes de leer la primera línea de un comando, y se expande y muestra PS2antes de leer la segunda línea y las siguientes de un comando de varias líneas.

Entonces, el >mensaje aparece si presiona Entery Bash determina que el comando está incompleto. Eso podría ser porque:

  • El carácter antes de la nueva línea es a \, que se trata como una continuación de línea .
  • Usted tiene una cadena incompleta (no coincidentes comillas o sin terminar aquí-doc) o algunos otros delimitadores no coincidentes, tales como $(), (), ``.
  • Ha comenzado una definición de función, un forbucle, un whilebucle o un case.

Si está viendo el mensaje secundario debido a un error de escritura involuntario, presione ControlCpara regresar al mensaje primario.

200_success
fuente
También obtienes el mensaje secundario cuando escribes en un documento aquí. Pero es menos probable que esto suceda por accidente que los demás.
Barmar
6

El shell esperando que completes el comando. Tal vez hay una cita no cerrada en alguna parte o cree que está comenzando un ciclo "for" y espera a que el usuario termine de escribir

SidJ
fuente