amarao (amarao_san) wrote,
amarao
amarao_san

Category:

pipe style programming

В парадигме программирования с xargs есть одна одна проблема - это отсутствие культурного filter.

Поясняю:
У нас есть генератор: (find, ls, cat - не важно что, важно, что по штуке между delimiter, то есть чаще всего по штуке на строку)
У нас есть фильтр по имени (grep)
У нас есть map для значений (awk)
У нас есть карринг для программ (xargs), который позволяет выполнить программу для каждого из списка, причём в качестве одного из множества других аргументов. xargs делает карринг для программы, и из N аргументов оставляет 1 (или M).

Но у нас нет фильтра с функцией.

Давайте дам простой пример:

cat filelist| ?????filter -I FILENAME check_file FILENAME|xargs -I FILENAME do_file FILENAME

У нас нет программы, которая бы позволила пропустить имя в пайпе только если выполненная программа вернула нам 0 (то есть успех). И это страшно бесит, потому что в минимальном виде это может быть ещё починено:

cat filelist|xargs -I FILENAME sh -c "check_filename FILENAME && do_file FILENAME", но во-первых это форк шелла на каждый файл, во-вторых не всюду работает (в частности, не работает, если нам надо дальше преобразовывать имена файлов).

Либо такой программы нет, либо я не достаточно хорошо знаю coreutils.
Tags: coreutils, shell programming, xargs
Subscribe

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 18 comments

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…