Почему не делает работы colordiff с stdin?

Метод GUI

Можно также использовать инструмент, такой как Затвор, чтобы сделать это. Это обеспечивает способность сделать снимки экрана выборов, окон или всего рабочего стола. Эти действия могут быть настроены к определенному сочетанию клавиш в Затворе.

диалоговое окно, показывающее отображения клавиатуры

               ss of shutter 1

диалоговое окно, показывающее шаблон именования

               ss of shutter 2

Метод командной строки

Если Вы используете команду import который является частью набора инструментов ImageMagick.

Пример

Вы просто выполняете команду ниже и затем щелкаете левой кнопкой мыши, когда Вы готовы сделать снимок экрана.

$ import "screenshot-$(date  +"%d %b %T").jpg"

Приведение к этому файлу:

$ ls -l | grep screenshot
-rw-rw-r--   1 saml saml  2273538 Sep 26 13:06 screenshot-26 Sep 13:06:55.jpg

С этой формой команды необходимо заключить любые аргументы в кавычки import так, чтобы имя файла не становилось разделенным на пробелах.

$ import "...file with spaces..."

Можно также использовать эту команду, чтобы сделать снимок экрана в настоящее время активного окна:

$ import -window \
    "$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW): window" | cut -d" " -f5)" \
    "screenshot-$(date  +"%d %b %T").jpg"

В вышеупомянутом примере, xprop команда программно определит идентификатор активного окна:

$ xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW): window" | cut -d" " -f5
0x2e00004

Существуют более тщательно продуманные вещи, которые можно сделать здесь, это должно только разжечь аппетит.

3
20.04.2014, 22:25
1 ответ

Использование diff

У меня это работает. Может показаться проблема с вашей конкретной версией diff ?

Пример

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

Моя версия

$ 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.

Вы также можете попробовать эту альтернативную форму:

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

Но в любом случае он должен сообщить, что они идентичны.

А как насчет colordiff?

Что ж, этот метод показывает, что они такие же.

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

Однако, как вы указали, использование echo действительно сообщает об этих двух строках как о разных:

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

Но поймите, что colordiff на самом деле просто оболочка сценария Perl вокруг GNU разн.

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

########################################################################
#                                                                      #
# ColorDiff - a wrapper/replacment for 'diff' producing                #
#             colourful output                                         #
#                                                                      #
# Copyright (C)2002-2012 Dave Ewart (davee@sungate.co.uk)              #
#                                                                      #
########################################################################

Поскольку это сценарий Perl, вы можете запустить его через отладчик Perl, чтобы увидеть, что происходит:

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

Я думаю, что суть в том, что colordiff не оборудован для ввода данных через STDIN ( - ), он предназначен только для ввода данных из файлов.

При поиске обнаружено несколько ошибок, связанных с отсутствием этой функции:

Ветвь разработки colordiff

Я нашел это на github, kimmel / colordiff . Похоже, что это более новая версия, которая лучше обрабатывает STDIN, на мой беглый взгляд на источник.

Альтернативные формы, которые работают

Вы можете использовать diff для генерации различий, а затем перенаправить вывод в colordiff .

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

Я нашел это в вилке / ветке daveewart colordiff , , доступной здесь, на github .Существует довольно много других форм, которые вы можете назвать colordiff , возможно, одна из них подойдет вам.

8
27.01.2020, 21:11

Теги

Похожие вопросы