Efetivamente, o shell pede comando / expressão completo e, por essa razão, está exibindo PS2
string de prompt.
De man bash
:
E um pouco antes disso:
% bl0ck_qu0te% Assim, como você pode imaginar lendo a documentação, os shells possuem múltiplos prompts com diferentes propósitos. PS1
prompt é a sua string root@sai:~#
, que aparece normalmente quando você digita comandos. >
é PS2
prompt. Há outros, também, PS3
para o bloco de comandos select
e PS4
para depuração com o comando set -x
. Nesse caso, estamos mais interessados em PS2
.
.Existem muitas maneiras em que o shell pode mostrar o prompt PS2
(e onde a conclusão de um comando em uma nova linha pode ser necessária). O mesmo prompt é usado quando você executa here-doc
de redirecionamento (em que um comando é considerado completo quando você vê a sequência de terminação, neste exemplo - EOF):
$ cat <<EOF
> line one
> line two
> EOF
line one
line two
Muitas vezes, a continuação do comando longo pode ser feita adicionando \
e imediata (!) nova linha, o que fará com que o mesmo prompt apareça:
$ echo Hello\
> World
HelloWorld
$ echo 'Hello\
> World'
Hello\
World
Quando canais, operadores lógicos ou palavras-chave especiais aparecem na linha de comando antes da nova linha, o comando também é considerado incompleto até que todas as instruções finais sejam inseridas:
$ echo Hello World |
> wc -l
1
$ echo Hello World &&
> echo "!"
Hello World
!
$ for i in $(seq 1 3); do
> echo "$i"
> done
1
2
3
$ if [ -f /etc/passwd ]
> then
> echo "YES"
> fi
YES
No seu caso particular, aspas simples implicam uma interpretação literal entre as aspas simples. Assim, como Zanna apontou, você está digitando um comando que consiste em newline + ls
+ newline. Esse nome de arquivo executável não pode ser encontrado (e geralmente nomes de arquivo de comando devem consistir apenas em uma única seqüência de caracteres ascii). Embora seja realmente possível ter nomes de arquivos que contenham caracteres especiais, é sempre evitado.
OBSERVAÇÃO : tal comportamento como mostrado no seu exemplo é específico para shells parecidos com o Bourne, incluindo bash
, dash
(no Ubuntu ele é symlink para /bin/sh
), ksh
e mksh
. csh
e suas derivadas não se comportam dessa maneira:
$ tcsh
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%
No entanto, no modo interativo, csh
ainda aumentará ?
como prompt2 quando mais entradas forem necessárias:
$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3