Notei isso ocasionalmente com uma variedade de aplicações. Eu sempre pensei que era porque a saída foi cancelada mais cedo (ctrl + c, por exemplo) ou algo semelhante, e o zsh está preenchendo um novo caractere de linha. Mas agora a curiosidade ganhou o melhor de mim, pois não parece fazer isso no bash.
zsh
bater
O Sequence
programa é algo que eu retirei de um livro enquanto lia as certificações Java e só queria ver se ele seria compilado e executado. Eu notei que ele não usa o println()
método do System.out
pacote / classe. Em vez disso, usa planície antiga print()
.
A falta de um caractere de nova linha é a razão pela qual recebo esse símbolo?
print -n "this is a test"
entãoprint "this is a test"
PROMPT_EOL_MARK=''
no meu .zshrc para ocultar a diferença entre a linha nova à direita ou não na saída do comando.Essa é uma característica específica
zsh
(e agorafish
também) de permitir que você veja claramente linhas não terminadas na saída de um comando.Nos shells tradicionais, se um comando gerar alguns dados após o último caractere de nova linha, ou, em outras palavras, se deixar o cursor do terminal não no início da linha, o próximo prompt do shell será anexado à última linha não terminada como em:
Isso controla o prompt, e é fácil perder isso
XXX
, especialmente se você tiver um prompt mais sofisticado como esse. Também afeta o posicionamento do cursor, o que causa falhas na exibição quando você move o cursor.zsh
contorna isso, mostrando que a saída tem uma linha não terminada com um%
caractere em vídeo em negrito e reverso e emite o próximo prompt no início da próxima linha:Ele faz isso exibindo o vídeo reverso
%
no final de cada comando (antes de cada prompt), mas seguido por 79 espaços (assumindo um terminal de 80 caracteres), um caractere CR (aquele que faz com que o cursor volte ao primeiro coluna) e a sequência a ser apagada no final da linha (e depois no prompt).Dessa forma, se houver uma linha não terminada, já que o cursor não está na primeira posição, esses 80 caracteres farão o cursor mover para a próxima linha (e isso
%
permanecerá). Caso contrário,%
esses e esses 79 espaços estarão em uma linha que será excluída posteriormente.Agora, isso só funciona se o terminal quebrar linhas (por exemplo, que não funcionará corretamente depois
tput rmam
). Se você tiver um terminal lento (como na linha serial de 9600 baud), poderá realmente ver aqueles%
sendo exibidos e removidos após cada comando, portanto,zsh
desabilite esse recurso:Dessa forma,
zsh
comporta-se mais como conchas tradicionais.Você também pode alterar essa marca com a
$PROMPT_EOL_MARK
variávelfonte