Perché a volte mi viene richiesto ripetutamente con ">" nel terminale?


19

Va bene, quando eseguo alcuni comandi nel modo sbagliato, (errato, ecc.) Il terminale emette questo: >invece di computername:workingfolder username$, e quando scrivo entra va così:

>

>

>

Sarebbe se premessi Invio 3 volte.

Risposte:


43

> è il prompt di continuazione predefinito. Ecco cosa vedrai se ciò che hai inserito prima aveva virgolette sbilanciate.

Ad esempio, digitare una virgoletta singola sulla riga di comando seguita da alcuni entertasti:

$ '
> 
> 
> 

Le richieste di continuazione si verificheranno fino a quando non lo farai

  • (a) completare il comando con un segno di virgoletta di chiusura

    o

  • (b) digitare Ctrl+ Dper terminare l'input, a quel punto la shell risponderà con un messaggio di errore relativo alle virgolette non bilanciate,

    o

  • (c) digitare Ctrl+ Cche interromperà il comando che si stava inserendo.

Come è utile

A volte, potresti voler inserire una stringa che contiene nuove righe incorporate. Puoi farlo come segue:

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

Ora, quando visualizziamo quella variabile di shell, puoi vedere che i prompt sono scomparsi ma le nuove righe vengono mantenute:

$ echo "$paragraph"
first line
second line
third line
end

16

Ciò accadrà se hai un preventivo non chiuso nel tuo comando. È qualcosa del tipo:

$ echo "test here
>
>
...

Puoi uscire da quella modalità chiudendo il preventivo (scrivi un "o ', o qualunque sia il tuo preventivo aperto). Potrebbe anche essere un blocco delimitato da parentesi graffe, un parzialmente completo for-doo while-doloop, o alcuni altri costrutti. Puoi anche premere Ctrl-Cper annullare questo comando (quindi premere Upper modificarlo).

Questo a volte può accadere senza un'ovvia citazione mancante quando si verificano espansioni di parametri o cronologia dove non te le aspettavi.


Il >è il vostro PS2valore ( "secondario prompt"). Puoi cambiarlo in qualcos'altro per ricordarti cosa è successo:

PS2="Unclosed >"

nel tuo .bashrclo farai invece stampare Unclosed >all'inizio di ogni riga.


7

Oltre alle altre risposte, viene visualizzato anche il prompt di continuazione quando si digita a \come l'ultimo carattere su una riga.


5
(Per me, questo di solito accade per caso, poiché la barra rovesciata è spaventosamente vicina al tasto Invio.)
Mr Lister,

Non sulla mia tastiera , non lo è.
TRiG

@TRiG Intendi, digiti spesso # per caso invece di \? Giusto ...
Signor Lister,

7

La risposta si trova in questa criptica menzione nel Manuale di riferimento di Bash :

5.1 Variabili Bourne Shell

[...]

  • PS1: La stringa del prompt principale. Il valore predefinito è ' \s-\v\$'. Vedere Stampa di un prompt , per visualizzare l'elenco completo delle sequenze di escape espanse prima della PS1visualizzazione.
  • PS2: La stringa del prompt secondario. Il valore predefinito è ' >'.

... seguito da :

6.3.3 Comportamento interattivo della shell

  1. Bash si espande e viene visualizzato PS1prima di leggere la prima riga di un comando e si espande e viene visualizzato PS2prima di leggere la seconda e le successive righe di un comando multilinea.

Quindi, il >prompt appare se si preme Entere Bash determina che il comando è incompleto. Ciò potrebbe essere dovuto al fatto che:

  • Il carattere prima della nuova riga è a \, che viene trattato come una continuazione di riga .
  • Hai una stringa incompleta (non corrispondenti virgolette o non terminato qui-doc) o di alcuni altri delimitatori non corrispondenti, ad esempio $(), (), ``.
  • È stata avviata una definizione di funzione, un forloop, un whileloop o un case.

Se visualizzi il prompt secondario a causa di un errore di battitura non intenzionale, premi ControlCper tornare al prompt primario.


Inoltre, viene visualizzato il prompt secondario quando si digita un qui-doc. Ma questo è meno probabile che accada per caso rispetto agli altri.
Barmar,

6

La shell in attesa che tu completi il ​​comando. Forse c'è una citazione non chiusa da qualche parte o pensa che tu stia iniziando un ciclo "for" e aspetta che l'utente finisca di scrivere

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.