Quando insiro aspas simples 'no terminal, ele passa para outro modo, e os comandos não são executados. O que é esse modo e quando o usamos?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
Quando insiro aspas simples 'no terminal, ele passa para outro modo, e os comandos não são executados. O que é esse modo e quando o usamos?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
Respostas:
Efetivamente, o shell solicita um comando / expressão completo e, por esse motivo, está exibindo a PS2sequência de prompt.
De man bash:
PROMPTING
Ao executar interativamente, o bash exibe o prompt primário PS1 quando estiver pronto para ler um comando e o prompt secundário PS2 quando precisar de mais entradas para concluir um comando.
E um pouco antes disso:
PS2 The value of this parameter is expanded as with PS1 and used as the secondary prompt string. The default is ``> ''.
Portanto, como você pode imaginar ao ler a documentação, os shells têm vários prompts com diferentes propósitos. O PS1prompt é sua root@sai:~#string, que aparece normalmente quando você insere comandos. >é o PS2prompt. Existem outros também: PS3para selectbloco de comando e PS4para depuração com set -xcomando. Nesse caso, estamos mais interessados PS2.
Há muitas maneiras pelas quais o shell pode mostrar o PS2prompt (e onde pode ser necessário concluir um comando em uma nova linha). O mesmo prompt é usado quando você executa o here-docredirecionamento (em que um comando é considerado completo quando você vê a sequência final, neste exemplo EOF):
$ cat <<EOF
> line one
> line two
> EOF
line one
line two
Muitas vezes, a continuação de um comando demorado pode ser feita adicionando \uma nova linha (!) Imediata, 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 comandos 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, uma aspas simples implica uma interpretação literal do que está entre as aspas simples. Assim, como Zanna apontou, você está inserindo um comando que consiste em nova linha + ls+ nova linha. Esse nome de arquivo executável não pode ser encontrado (e geralmente os nomes dos arquivos de comando devem consistir apenas em caracteres alfanuméricos, além de sublinhados, traços e pontos). Embora seja realmente possível ter nomes de arquivos que contenham caracteres especiais, sempre é evitado.
NOTA : tal comportamento como mostrado no seu exemplo é específico para Bourne-como conchas, incluindo bash, dash(no Ubuntu que é ligada simbolicamente a /bin/sh), kshe mksh. cshe seus derivados não se comportam dessa maneira:
$ tcsh
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%
No entanto, no modo interativo, cshainda aumentará ?como prompt2 quando mais entradas forem necessárias:
$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3
What's the difference between <<, <<< and < < in bash?está offline / errado.
O shell está apenas aguardando a cotação de fechamento. Quando você o digita, ele faz exatamente o que costuma fazer e tenta executar o comando digitado.
As aspas fazem com que o shell não interprete caracteres especiais, o que significa que expansões não são executadas. Aspas simples suprimem completamente toda a interpretação de caracteres especiais. Normalmente, uma nova linha separa comandos, mas aqui você incluiu as novas linhas como parte do comando, citando-as.
Como não existe um comando como <newline>ls<newline>, ele não foi encontrado.