O comportamento do meu ambiente shell mudou:
Anteriormente, ao colar uma definição de função, por exemplo
function exampleFunc {
echo hello
}
para o shell, ele seria exibido como formatado e registraria a nova definição de função.
Agora, por algum motivo, ele é exibido >
antes de cada linha, exceto a primeira.
function exampleFunc {
>echo hello
>}
Descobri que funções contendo loops for agora falham ao serem registradas.
Qual pode ser a explicação para isso? Como posso voltar ao modo anterior?
Ubuntu 20.04
Essa alteração ocorreu após a instalação do nushell , mas talvez não esteja relacionada.
Isso não tem nada a ver com a instalação do
nushell
. Também não impede que o shell funcione corretamente.O
>
é o valor padrão do prompt secundário do shell (PS2
). O prompt secundário é exibido sempre que o shell requer mais entrada depois que o usuário pressionou a Entertecla sem concluir o comando atual. Isso acontece apenas quando o shell está no modo interativo.O padrão POSIX diz isso sobre
PS2
:No seu exemplo específico, a definição da função é o comando que ainda precisa ser concluído. Não é até que o usuário insira a chave de fechamento,
}
, no final da definição que o shell pode executar o comando.Você também receberá o prompt secundário se estiver colando os comandos no
bash
shell se "colar entre colchetes" tiver sido desabilitado para a biblioteca Readline. Por padrão, o modo de colagem entre colchetes está ativado, o que significa que o shell processará um pedaço de texto colado de uma só vez, em vez de linhas individuais. Esse comportamento pode ser desabilitado (para futuras sessões de shell) adicionando a seguinte linha ao seu~/.inpturc
arquivo:O modo de colagem entre colchetes também é desabilitado por padrão se o terminal for "burro" ou se você estiver usando uma versão do shell bash anterior a 5.0.
Shells diferentes podem ter um valor padrão diferente em
$PS2
. Ozsh
shell, por exemplo, permite que você saiba qual comando não está completo no momento, atualizando dinamicamente o prompt:... enquanto o
bash
shell usa uma>
string estática:O
nushell
shell parece ser usado:::
como equivalente ao prompt secundário em shells do tipo POSIX. No entanto, onushell
shell nem tenta ser um shell POSIX.Desativar a
PS2
variável embash
poderia levar a confusão. Por exemplo, se você acha que acabou de invocar um comando de execução longa, mas na verdade esqueceu uma aspa de fechamento, não teria nenhuma indicação de que o shell estava esperando que você concluísse o comando.É
>
uma Variável Bourne Shell conhecida como string de prompt secundário .De gnu.org:
Variável Bourne Shell
sequência de prompt secundária ,
PS2
Ele pode ser suprimido usando este comando:
Inspirado em https://superuser.com/a/1499801/217142
Não entendi por que meu shell foi apresentado
>
como a string de prompt secundária. No entanto, como afirmou Kusalananda, o problema que tive não foi com isso (ou com a instalação do nushell). Em vez disso, o loop for não funcional que mencionei foi devido à introdução inadvertida de guias no editor do qual eu estava copiando. Isso faz com que o bash interrompa a definição da função com umadisplay all X possibilities
mensagem.Para recriar o erro, eu deveria ter postado:
Observe o
\s\t\t
( espaço-tab-tab ) antesecho
. Quando eu estava simplificando isso para a pergunta, falhei em reconhecer a causa. Uma lição dolorosa!