Por que às vezes recebo solicitações repetidas com “” no terminal?

19

Tudo bem, quando eu executo certos comandos da maneira errada, (digitado errado, etc.) O terminal gera isto: > em vez de computername:workingfolder username$ , e quando eu digito digito, é assim:

>

>

>

Isso seria se eu pressionasse enter 3 vezes.

    
por DisplayName 03.10.2014 / 07:34

5 respostas

43

> é o prompt de continuação padrão. É isso que você verá se o que você digitou anteriormente tiver marcas de cotação desbalanceadas.

Como exemplo, digite uma aspa simples na linha de comando seguida por algumas enter keys:

$ '
> 
> 
> 

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

  • (a) conclua o comando com uma marca de fechamento de cotação

    ou

  • (b) digite Ctrl + D para finalizar a entrada, ponto no qual o shell responderá com uma mensagem de erro sobre aspas não balanceadas,

    ou

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

Como isso é útil

Às vezes, você pode querer inserir uma string 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
    
por 03.10.2014 / 07:41
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 sua cotação aberta). Também pode ser um bloco delimitado por contraventamento, um loop for-do ou while-do parcialmente completo ou determinadas outras construções. Você também pode pressionar Ctrl-C para cancelar este comando (depois pressionar Up para revisá-lo).

Isso às vezes pode acontecer sem uma citação óbvia ausente quando parâmetro ou as expansões história ocorrem onde você não esperava.

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

PS2="Unclosed >"

no seu .bashrc fará com que seja impressa Unclosed > no início de cada linha.

    
por 03.10.2014 / 07:43
7

Além das outras respostas, você também recebe o prompt de continuação quando digita um \ como o último caractere em uma linha.

    
por 03.10.2014 / 08:40
7

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

5.1 Bourne Shell Variables

[...]

  • PS1: The primary prompt string. The default value is ‘\s-\v\$’. See Printing a Prompt, for the complete list of escape sequences that are expanded before PS1 is displayed.
  • PS2: The secondary prompt string. The default value is ‘>’.

seguido de :

6.3.3 Interactive Shell Behavior

  1. Bash expands and displays PS1 before reading the first line of a command, and expands and displays PS2 before reading the second and subsequent lines of a multi-line command.

Assim, o prompt > aparece se você pressionar Enter e o Bash determina que o comando está incompleto. Isso pode ser porque:

  • O caractere antes da nova linha é um \ , que é tratado como uma linha continuação .
  • Você tem uma string incompleta (citações não correspondidas ou não terminada aqui-doc) ou alguns outros delimitadores não correspondentes, como $() , () , '' .
  • Você iniciou uma definição de função, um for loop, um while loop ou um case .

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

    
por 03.10.2014 / 21:31
6

O shell esperando por você para concluir o comando. Talvez exista uma citação não fechada em algum lugar ou que você esteja iniciando um loop "for" e espere que o usuário termine de digitar

    
por 03.10.2014 / 07:42