Por que às vezes sou solicitado repetidamente com ">" no terminal?


19

Tudo bem, quando eu executo certos comandos da maneira errada, (erros de ortografia, etc.) O terminal gera isso: em >vez de computername:workingfolder username$, e quando eu digito enter, fica assim:

>

>

>

Isso seria se eu pressionasse enter 3 vezes.

Respostas:


43

> é o prompt de continuação padrão. É isso que você verá se o que você inseriu antes tinha aspas desequilibradas.

Como exemplo, digite uma aspas simples na linha de comando, seguida de algumas enterteclas:

$ '
> 
> 
> 

Os prompts de continuação ocorrerão até você

  • (a) complete o comando com aspas finais

    ou

  • (b) digite Ctrl+ Dpara finalizar a entrada; nesse momento, o shell responderá com uma mensagem de erro sobre as aspas desequilibradas,

    ou

  • (c) digite Ctrl+ Cque abortará o comando que você estava inserindo.

Como isso é útil

Em algum momento, convém inserir uma sequência que contenha novas linhas incorporadas. Você pode fazer isso da seguinte maneira:

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

Agora, quando exibimos essa variável de shell, você pode ver que os prompts desapareceram, mas as novas linhas são mantidas:

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

16

Isso acontecerá se você tiver uma cotação não fechada em seu comando. Isso é algo como:

$ echo "test here
>
>
...

Você pode sair desse modo fechando a cotação (escreva um "ou 'ou seja qual for a sua cotação em aberto). Também pode ser um bloco delimitado por colchetes, um loop for-doou parcialmente completo while-doou algumas outras construções. Você também pode pressionar Ctrl-Cpara cancelar este comando (depois pressionar Uppara revisá-lo).

Às vezes, isso pode ocorrer sem uma cotação ausente óbvia quando ocorrem expansões de parâmetro ou histórico onde você não as esperava.


O >é o seu valor PS2("prompt secundário"). Você pode mudar isso para outra coisa para lembrá-lo do que aconteceu:

PS2="Unclosed >"

em seu .bashrcvai fazê-lo imprimir Unclosed >no início de cada linha.


7

Além das outras respostas, você também recebe o prompt de continuação ao digitar a \como o último caractere de uma linha.


5
(Para mim, isso geralmente acontece por acidente, como a barra invertida é assustadoramente perto da tecla Enter.)
Sr. Lister

Não no meu teclado , não é.
TRiG

@TRiG Quer dizer, você costuma digitar # por acidente, em vez de \? Certo ...
Sr. Lister

7

A resposta está nesta menção enigmática no Manual de Referência do Bash :

5.1 Variáveis ​​Bourne Shell

[...]

  • PS1: A sequência de prompt principal. O valor padrão é ' \s-\v\$'. Consulte Imprimindo um prompt para obter a lista completa de seqüências de escape expandidas antes da PS1exibição.
  • PS2: A sequência de prompt secundária. O valor padrão é ' >'.

Seguido por :

6.3.3 Comportamento interativo do shell

  1. O Bash se expande e é exibido PS1antes de ler a primeira linha de um comando, e se expande e é exibido PS2antes de ler a segunda e subsequente linha de um comando de várias linhas.

Portanto, o >prompt será exibido se você pressionar Entere Bash determinar que o comando está incompleto. Isso pode ser porque:

  • O caractere antes da nova linha é a \, que é tratado como uma continuação de linha .
  • Você tem uma cadeia incompleta (incompatíveis aspas ou não terminada aqui-doc) ou alguns outros delimitadores incompatíveis, tais como $(), (), ``.
  • Você iniciou uma definição de função, um forloop, um whileloop ou a case.

Se você estiver vendo o prompt secundário devido a um erro de digitação não intencional, pressione ControlCpara retornar ao prompt principal.


Você também recebe o prompt secundário ao digitar um documento aqui. Mas é menos provável que isso aconteça por acidente do que os outros.
Barmar

6

O shell esperando por você para concluir o comando. Talvez haja uma citação não fechada em algum lugar ou ele pense que você está iniciando um loop "for" e aguarde o usuário terminar de digitar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.