Como posso impedir o shell Z de conspirar para alterar a saída do GNU Make?

2

Minha pesquisa sugere que o Z shell tem laços estreitos com duas sociedades secretas. Esses laços são revelados ao contrastar a saída de GNU Make ao usar bash vs. zsh . Eu gostaria de saber como configurar minha concha para frustrar qualquer plano desonesto que tenha sido traçado contra mim.

  1. Illuminati

    O objetivo desta parceria parece ser esconder segredos à vista de todos. Considere a saída do seguinte simples Makefile :

    test:
        @echo "# header"
        @echo "line with a hash # in the middle"
    

    Se eu executar isso no meu zsh shell, a primeira linha ficará oculta de mim. Este não é um problema com o escape do hash porque (a) somente a primeira linha tem um problema, (b) redirecionando isso para um arquivo faz com que ele apareça bem, ponto em que cat ing o arquivo no mesmo terminal mostra bem, e (c) se eu copiar do terminal o texto está realmente lá, ele só aparece como preto.

    Comopossopararoqueozshestáfazendonasaídaqueocultamensagenssecretasparaqueeupossatomardecisõestotalmenteinformadascombasenasaída?

  2. Maçonaria

    Oobjetivodessaparceriapareceserliberaromínimodeinformaçãopossívelsobreoqueestáacontecendonosbastidores.ConsidereasaídadesteMakefilesimples:

    test:foriin$$(seq110);doecho-n"[$$i]"; sleep 1; done
    

    Se eu rodar isso está no meu zsh shell, a saída é armazenada em algum lugar até que uma nova linha seja atingida ou o destino seja concluído. Então, e só então, qualquer coisa é devolvida ao terminal. Isso faz trabalhos de longa duração que realmente mostram algo enquanto estão funcionando, mas não incluem quebras de linha frequentes na saída são muito difíceis de serem seguidas. Por contraste, a saída que recebo de bash é muito mais informativa.

    Comopossopararoqueozshestáfazendoquecensuraasaídaatéserforçadoarevelá-laparaqueeupossaveroqueestáacontecendoquandoissoacontece?

Sealgodissoforrelevante,estouusandooGNUMake4.2.1,Zshell5.2eexecutando-odentrodoTmux2.4emumajaneladoTermitev12.Meusdotfilesestãodisponíveispara zsh , tmux e térmita .

Observe também que nenhum desses problemas parece ter algo a ver com o shell make é executado internamente, pois adicionar SHELL = bash ao Makefile não muda nada.

    
por Caleb 13.12.2016 / 08:23

1 resposta

7

Por não usar add-ons cuja finalidade é exatamente isso.

Não é a casca Z fazendo isso; nem tmux nem cupim.

Você instalou um complemento do Prezto (ou algo semelhante) cujo propósito documentado é "adulterar a saída do GNU Make". O topo do add-on diz:

#
# Highlights make output.
#
# Authors:
#   Sorin Ionescu <[email protected]>
#

Como você pode ver, quando você executou

make test
você não estava executando o programa make real, mas estava executando o complemento chamado make que você instalou. Por sua vez, ele estava executando um comando chamado colormake .

E o que faz colormake ? Ele executa make com sua saída padrão e erro padrão não sendo um dispositivo terminal, colocando-os em um programa Perl que lê e processa sua entrada padrão uma linha inteira por vez. Você pode realmente reproduzir todos os efeitos que você vê, em qualquer shell compatível com POSIX , fazendo a mesma coisa:

/usr/bin/make test 2>&1 | colormake.pl
Isso não tem nada a ver com o shell Z e tudo a ver com o fato de você ter instalado um plug-in que substituiu o comando make .

Testemunhar a linha de cada vez por conta própria, sem a coloração e detecção de comentários e assim por diante que colormake.pl faz, em qualquer shell compatível com POSIX :

/usr/bin/make test 2>&1 | perl -e 'while (<>) { print $_ ; }'

Então, desinstale ou desative o complemento que você instalou.

O Prezto também substitui o comando diff .

Leitura adicional

  • Bjarni Rúnar Einarsson. Colormake .
  • Sorin Ionescu (2012). make . Prezto.
  • Sorin Ionescu (2012). diff . Prezto.
por 13.12.2016 / 11:33