Quando pressiono a barra invertida \, recebo um >
símbolo (maior que). O que isto significa?
Quando pressiono a barra invertida \, recebo um >
símbolo (maior que). O que isto significa?
Respostas:
Sempre que você usa a linha de comando, pode haver uma instância em que você precisa executar um comando que é muito longo. Portanto, você deseja dividir o comando em várias linhas para melhor legibilidade e entendimento. Mas se você usar um novo caractere de linha digitado Enter, o shell pensará que é um novo comando. Então você usa \
seguido pelo caractere de nova linha.
Basicamente, os comandos ou scripts bash são "interpretados", isto é, executados linha por linha. Cada nova linha significa o início de um novo comando. No terminal, quando você pressiona Enter, você recebe um prompt para executar um novo comando. Portanto, uma nova linha precisa ser "escapada". Digitar \
seguido de Enterpermite dividir o comando atual em várias linhas, para que o shell não pense que é um novo comando, mas a continuação do comando anterior.
>
nada mais é do que um prompt para a próxima linha do comando que está sendo inserida.
Por exemplo:
Se queremos instalar vários pacotes, o comando será como
$ sudo apt install [package1] [package2] [package3] ...
Mas, às vezes, isso torna o comando confuso. Para que possamos usar \
seguido por Enter(caractere de nova linha)
$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
$PS1
e $PS2
. Consulte a página do manual do bash para aprender o formato e use echo "'$PS2'"
para visualizar a configuração atual.
O caractere de barra invertida ( \
) é usado como caractere de escape no shell. Se você o usar como o último caractere da linha, ele escapará da nova linha, para que você possa continuar seu comando na próxima linha, em vez de finalizá-la. Isso é indicado pelo >
prompt no Bash.
Exemplo:
$ echo A\
> B
AB
$
Para colocar um literal \
em seu comando, você deve escapá-lo usando outra barra invertida:
$ echo \\
\
$
[adicionando uma resposta (muito longa / complexa), pois os outros 2 não mencionam como o ">" aparece ... ou seja, não mencionam o PS2]
Você digitou:: \Enterthe \diz para o shell apenas exibir o Entercaractere literário em vez de interpretá-lo como de costume (Portanto, o shell "vai para a próxima linha" em vez de terminar a linha de comando atual e interpretá-la. A menos que você esteja em algum outras construções, como heredoc, loop for, etc).
Seu terminal, portanto, interpreta \Entercomo: "vá para a próxima linha" (sem começar a interpretar o comando) e, portanto, o terminal agora permite que você insira a segunda linha de um comando de várias linhas e, para torná-lo mais visível, exibe o $PS2
conteúdo ( chamado prompt do PS2 ) em cada linha subseqüente.
A variável PS2 geralmente é definida por padrão como: PS2="> "
e você pode, por exemplo, editar seu ~ / .bashrc para redefini-lo como desejar (levando em consideração que ele deve, imo, evitar conter caracteres perigosos, como >
ou ;
, e deve ajudá-lo quer ver claramente que é uma comandos de várias linhas, mas desativar seu conteúdo de várias linhas (ex: PS2="#cont#"
) ou deixá-lo facilmente copiar / colar-los com tão pouco impacto em suas linhas quanto possível (ex: PS2=" "
)
O que, a propósito, é um padrão ruim, pois pode muito bem levar alguém a excluir alguns comandos binários importantes em alguns casos.
Você pode redefinir o PS2 para ser outra coisa (eu gosto: PS2 = "", por exemplo) para que os comandos de múltiplas linhas possam ser facilmente copiados / colados sem temer o seguinte:
Por exemplo, digamos que você tenha um comando que começa a ser bastante longo (e pode dobrar na tela se o terminal não for largo o suficiente):
grep -i "something" /some/file /another/file /3rd/file /etc/someimportantfile
Se o comando parecer muito longo (e contornar), convém dividi-lo visualmente em duas linhas, escolhendo onde (quando) você deseja a próxima linha inserindo: \Enterno local apropriado:
grep -i "something" /some/file /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !
Usando o PS2 padrão, o shell adicionou ">" before "/ etc / someimportantfile". Portanto, se você copiar / colar essas 2 linhas em outro terminal, sua ação será completamente diferente: em vez de grepping em 4 arquivos, o grep é entrando apenas nos 3 primeiros arquivos, e a saída grep substitui o conteúdo do 4º arquivo (/ etc / someimportantfile)!
Para evitar esses problemas (e muitos outros): por exemplo, você pode definir: PS2=" "
para tornar os comandos de várias linhas mais limpos e fáceis de copiar / colar:
grep -i "something" /some/file /another/file /3rd/file \
/etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!
Observe como esse comando time / bin / som é simplesmente deslocar 2 espaços para a direita e nenhum ">" foi inserido, para que você possa copiar / colar com segurança este comando de 2 linhas.
O PS2 também é usado nos loops "for" "while" etc, e tê-lo definido como "" é, para mim, melhor naqueles também.