Home > Без рубрики > Один из разработчиков GNOME предложил новую реализацию неименованных каналов

Один из разработчиков GNOME предложил новую реализацию неименованных каналов

Раздумывая над способами модернизации командной строки UNIX, Александр Ларсон (Alexander Larsson), активный разработчик GNOME и мантейнер таких проектов, как Nautilus, Gnome-vfs и Dia, предложил в своем блоге новый способ объединения команд с помощью пайпов, основная идея которого заключается передаче через канал не простых потоков неструктурированных данных, а объектов, представленных в бинарной форме. По словам Александра, его идея может сделать командный интерфейс более гибким, но не таким переусложненным как Microsoft PowerShell.

В качестве основы для представления объектов Александр предложил использовать тип данных GVariants из библиотеки Glibc, используемой также в GTK+ и GNOME. Он реализовал несколько утилит, повторяющих функциональность стандартных UNIX-команд ps, sort, head и других, которые принимают на вход и выдают на выходе объекты типа GVariants, причем в случае, если вывод осуществляется в терминал или принимающая команда не поддерживает на входе объекты, данные будут переданы в текстовой форме. Например, вывод его версии ps в терминал будет выглядеть так:

       $ dps     <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...     <{'pid': <uint32 2>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...     ...      

Применив к этому выводу другие утилиты можно легко отсортировать объекты по необходимым полям и выполнить их фильтрацию на основе тех или иных полей:

     $ dps | dfilter euid \< 1000 | dsort rss     <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>, 'user': <'root'>,     <{'pid': <uint32 769>, 'ppid': <uint32 745>, 'euid': <uint32 0>, 'user': <'root'>,     ...  

В конце-концов можно использовать специальные утилиты для вывода данных удобочитаемом виде:

     dps | dfilter euid \< 1000 | dsort rss | dhead 4 | dtable pid user rss vsize cmdline     pid     user      rss    vsize  cmdline       1   'root'    24408    61488 '/usr/lib/systemd/systemd'     769   'root'    16028   108000 '/usr/bin/Xorg :0 -background none -logverbose 7 -seat seat0 -nolisten tcp vt1'     608   'root'    15076   255312 '/usr/bin/python /usr/sbin/firewalld --nofork'     747   'root'     8276   452604 '/usr/sbin/libvirtd'    

Как говорит Александр, такой подход существенно расширяет возможности обработки данных, позволяя, например, применять к выводу типо-зависимые операции (сравнение euid с числом), выполнять правильное обрезание списка (без учета заголовка), работать одновременно со всеми полями объекта даже в том случае, если они не будут выведены на экран. Кроме того, все данные между командами передаются в бинарной форме, благодаря чему их обработка существенно упрощается.

Источник: http://www.opennet.ru/opennews/art.shtml?num=34591

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

TOP