Quando pressiono a barra invertida \, recebo um >
símbolo (maior que). O que isto significa?
command-line
bash
Curiouskangaroo
fonte
fonte
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
Mas, às vezes, isso torna o comando confuso. Para que possamos usar
\
seguido por Enter(caractere de nova linha)fonte
$PS1
e$PS2
. Consulte a página do manual do bash para aprender o formato e useecho "'$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:
Para colocar um literal
\
em seu comando, você deve escapá-lo usando outra barra invertida:fonte
[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):
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:
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: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.
fonte