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:~#
command-line
bash
manikanta
fonte
fonte
'
)Respostas:
Efetivamente, o shell solicita um comando / expressão completo e, por esse motivo, está exibindo a
PS2
sequência de prompt.De
man bash
:E um pouco antes disso:
Portanto, como você pode imaginar ao ler a documentação, os shells têm vários prompts com diferentes propósitos. O
PS1
prompt é suaroot@sai:~#
string, que aparece normalmente quando você insere comandos.>
é oPS2
prompt. Existem outros também:PS3
paraselect
bloco de comando ePS4
para depuração comset -x
comando. Nesse caso, estamos mais interessadosPS2
.Há muitas maneiras pelas quais o shell pode mostrar o
PS2
prompt (e onde pode ser necessário concluir um comando em uma nova linha). O mesmo prompt é usado quando você executa ohere-doc
redirecionamento (em que um comando é considerado completo quando você vê a sequência final, neste exemploEOF
):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: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:
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
),ksh
emksh
.csh
e seus derivados não se comportam dessa maneira:No entanto, no modo interativo,
csh
ainda aumentará?
como prompt2 quando mais entradas forem necessárias:Veja também:
fonte
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.fonte