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

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

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

   $ dps   <{'pid': , 'ppid': , 'euid': , 'egid': , ...   <{'pid': , 'ppid': , 'euid': , 'egid': , ...   ... 

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

   dps | dfilter euid \< 1000 | dsort rss   <{'pid': , 'ppid': , 'euid': , 'egid': , ...   <{'pid': , 'ppid': , 'euid': , 'egid': , ...   ...  

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

   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

<= Назад
Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>