'less' executa de forma diferente quando invocado a partir do Bash e do Git

1

Quando vejo um grande diff com git diff , ele é paginado com less . Isso é confirmado abrindo outra janela e verificando dados de ps -aux e /proc .

No entanto, quando less é invocado pelo Git, ele não reverte o conteúdo do terminal para seu estado anterior depois de atingir q (o conteúdo do diff permanece no terminal). Mas quando eu faço

git diff commit1 commit2 --color | less -R

e sai do less com uma chave q , o conteúdo desaparece e o terminal volta ao estado anterior.

Mais interessante, se eu fizer isso

export PAGER=less LESS='-R'

e invocar git diff (ou qualquer outro comando que chame um pager), less se comporta da mesma forma como se invocado diretamente do shell Bash.

i

Aqui está uma breve captura de tela descrevendo minha pergunta. No painel esquerdo, o comando é executado da seguinte forma:

unset PAGER GIT_PAGER LESS
git diff HEAD^ HEAD

No painel direito, você vê os comandos. O commit mais recente foi de mais de 100 linhas de y gravadas em um arquivo. Nos dois painéis less é encerrado com a chave q .

Alguém pode me dizer o que é diferente e explicar por quê?

    
por iBug 16.09.2018 / 12:44

1 resposta

6

Documentação :

When the LESS environment variable is unset, Git sets it to FRX (if LESS environment variable is set, Git does not change it at all).

A opção -X ( --no-init ) é responsável por não limpar o terminal após a saída de less .

    
por 16.09.2018 / 15:18

Tags