Piping svn diff produz caracteres ESC (OS X 10.7.5)

1

Por que quando cano svn diff output para, digamos less , recebo um monte de ESC caracteres?

$ svn diff | less

Index: test/unit/tour_guide_tip_test.rb
===================================================================
ESC[1;31m--- test/unit/tour_guide_tip_test.rb   (revision 0)ESC[0;0m
ESC[1;34m+++ test/unit/tour_guide_tip_test.rb   (revision 66)ESC[0;0m
ESC[1;35m@@ -0,0 +1,7 @@ESC[0;0m
ESC[1;34m+require 'test_helper'ESC[0;0m
ESC[1;34m+ESC[0;0m
ESC[1;34m+class TourGuideTipTest < ActiveSupport::TestCaseESC[0;0m
ESC[1;34m+  # test "the truth" doESC[0;0m
ESC[1;34m+  #   assert trueESC[0;0m
ESC[1;34m+  # endESC[0;0m
ESC[1;34m+endESC[0;0m

No entanto, se eu direcionar a saída para um arquivo ( svn diff > whatever.diff ) e, em seguida, less whatever.diff , ficará bem?

$ svn diff > whatever.diff
$ less whatever.diff

Index: test/unit/tour_guide_tip_test.rb
===================================================================
--- test/unit/tour_guide_tip_test.rb    (revision 0)
+++ test/unit/tour_guide_tip_test.rb    (revision 66)
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class TourGuideTipTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
    
por André Dion 10.09.2013 / 15:44

1 resposta

2

Esses caracteres de escape marcam partes da saída que são coloridas se não forem canalizadas.

Baseado em esta questão muito semelhante e sua resposta eu sugiro que você tente para usar less -R em vez de simples less .

Se você quiser usar outras ferramentas além de less , poderá remover as sequências com sed 's/\x1b\[[0-9]*m//g' , conforme discutido em esta resposta.

Seu comando completo seria então

svn diff | sed 's/\x1b\[[0-9]*m//g' | othertool

No OS X, os códigos de escape são diferentes, portanto, o padrão deve ser alterado. Também parece ser o caso que (usando OS X) a seqüência de escape \x1b funcionará com perl , mas não com sed . Uma expressão resultante que funciona tanto para o Linux quanto para o OS X é:

svn diff | perl -pe "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mK]//g" | othertool
    
por 10.09.2013 / 16:15

Tags