Por que o colordiff não trabalha com stdin?

3

Eu tenho um arquivo e uma entrada provenientes de um tubo. Eles são idênticos. Então, por que o colordiffrelatório informa diferenças ?:

echo "123" | colordiff <(echo "123") -
1d0
< 123

Parece que este é um causador do problema. Com diff puro, tudo funciona bem.

Martin Vegter
fonte
Você também pode tentar isso:diff <(echo "123") <(echo "123")
gniourf_gniourf

Respostas:

8

Usando diff

Isso funciona para mim. Parece ser um problema com sua versão específica de diff?

Exemplo

$ echo "123" | diff <(echo "123") -
$

Minha versão

$ diff --version
diff (GNU diffutils) 3.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.

Você também pode tentar este formulário alternativo:

$ diff <(echo "123") <(echo "123")
$

Mas de qualquer forma, deve informar que eles são idênticos.

E o colordiff?

Bem, este método mostra que são os mesmos.

$ colordiff <(echo "123") <(echo "123")
$

No entanto, como você indicou echo, de fato, relate essas duas cadeias de caracteres como sendo diferentes:

$ echo "123" | colordiff <(echo "123") -
1d0
< 123

Mas perceba que colordiffé realmente apenas um wrapper de script Perl em torno do GNU diff.

$ head /usr/bin/colordiff
#!/usr/bin/perl -w

########################################################################
#                                                                      #
# ColorDiff - a wrapper/replacment for 'diff' producing                #
#             colourful output                                         #
#                                                                      #
# Copyright (C)2002-2012 Dave Ewart ([email protected])              #
#                                                                      #
########################################################################

Como é um script Perl, você pode executá-lo através do depurador Perl para ver o que está acontecendo:

$ echo "123" | perl -d /usr/bin/colordiff <(echo "123") -

Eu acho que a conclusão aqui é que colordiffnão está equipado para receber entradas via STDIN ( -), ele foi projetado apenas para receber entradas de arquivos.

Pesquisando, existem vários erros arquivados em relação à falta desse recurso:

Ramo de desenvolvimento do colordiff

Encontrei isso no github, kimmel / colordiff . Parece ser uma versão mais recente que lida melhor com o STDIN, na minha breve olhada na fonte.

Formas alternativas que funcionam

Você pode usar diffpara gerar diferenças e canalizar a saída colordiffposteriormente.

$ echo "123" | diff -u <(echo "123") - | colordiff

Encontrei isso no fork / branch do daveewart colordiff, disponível aqui no github . Há um número bastante grande de outras formas que você pode chamar colordiff, talvez uma delas atenda às suas necessidades.

slm
fonte