LINUX.ORG.RU
ФорумTalks

GNU cat теперь со вкусом юниксвея

 ,


1

2

Пропатчил GNU cat в сторону юниксвея. Поскольку все его опции так или иначе приводили к тому, что модифицировались данные, а

cat's job is to collect the data in files. Programs that collect data shouldn't change the data; cat therefore shouldn't transform its input.
(«Program design in the UNIX environment», Rob Pike, Brian W. Kernighan)

, то я написал патч, который полностью вырезает чтение опций. Теперь cat всегда просто cat. Скачать патч можно здесь: http://saahriktu.org/downloads/patches/gnu_coreutils-8.27-cat_unixway.patch.lzma .

Заодно портанул старый патч ls'а (который меняет дефолт на старый добрый literal_quoting_style) к новой версии GNU coreutils: http://saahriktu.org/downloads/patches/gnu_coreutils-8.27-ls_quoting.patch.lzma .

Enjoy!

★★★★★

Полагаю, здесь не обошлось без влияния разработчиков gnome :-)

з.ы. в самом деле - был смысл?

alex4321
()

Я и не знал, что у cat ключи есть. Хотя -u вот прочитал, вроде стандартный. Выпиливайте у echo теперь.

d_a ★★★★★
()
Ответ на: комментарий от Xenius

Да, не заставляет. Зато через них есть совместимость с неюниксвейными скриптами. Что в т.ч. позволяет самым разным людям троллить сторонников юниксвея. Мол, как так, сами за юниксвей, а в вашем cat'е... А после этого патча всё становится юниксвейно.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Что в т.ч. позволяет самым разным людям троллить сторонников юниксвея.

Тролли всегда найдут, кого и чем потроллить. Я бы так и сказал «Ну сделали бесполезное расширение и что с того?»

Xenius ★★★★★
()
Ответ на: комментарий от DELIRIUM

В апстрим патчи слать смысла нет, поскольку на эту проблему, как видно по стартовому посту, в своё время обращали внимание сами Роб Пайк и Брайан Керниган, но и их никто не послушал. В практическое пользование уже ушли версии cat'а с опциями, и с этим самым практическим использованием оно стало в некотором роде стандартом. И в проекте GNU, по ходу, приняли решение не ломать с ним совместимость. Но, это не юниксвейно, да.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от Deleted

systemd является неюниксвейным по архитектуре. То, что используют вместо init'а, должно выполнять не больше функций чем традиционный init. Всё остальное должно быть реализовано в других проектах.

saahriktu ★★★★★
() автор топика

Глянь sbase/ubase проекта suckless.

Патч грязный, будет конфликтовать с маном.

Deleted
()
Ответ на: комментарий от Deleted

По-хорошему cat, конечно, надо писать с нуля. Впрочем, тут даже никаких чужих исходников поднимать не надо.

Вот, пожалуйста:

/*
 * Unixway cat implementation v0.1 by saahriktu
 * under GNU GPLv3
 */

#include <stdio.h>
#include <string.h>

void
copystdin ()
{
  int stdc;
  while ((stdc = getchar ()) != EOF)
    putchar (stdc);
}

int
main (int argc, char **argv)
{
  int nfid, c;
  FILE *fptr;
  if (argc != 1)
    {
      for (nfid = 1; nfid < argc; nfid++)
        {
          if (!strcmp ("-", argv[nfid]))
            {
              copystdin ();
              continue;
            }
          else if ((fptr = fopen (argv[nfid], "r")) == NULL)
            continue;
          while ((c = fgetc (fptr)) != EOF)
            putchar (c);
          fclose (fptr);
        }
    }
  else
    copystdin ();
  return 0;
}

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Сделай, пожалуйста, и systemd юниксвейным.

Поддерживаю, а то скоро сам Поттеринг не будет знать, что у него там происходит.

torvn77 ★★★★★
()

написал патч, который полностью вырезает чтение опций

Enjoy!

/0

h578b1bde ★☆
()
Ответ на: комментарий от saahriktu

Зато через них есть совместимость с нормальными скриптами. Что в т.ч. позволяет самым разным людям троллить сторонников убожества. Мол, как так, сами за убожество, а в вашем cat'е... А после этого патча всё становится убого.

Починил.

h578b1bde ★☆
()
Ответ на: комментарий от Ygor

Вангую киборг будет против!

Да пофиг, пусть будет. Оно нужно даже меньшему количеству фанатиков чем KOI8-R.

h578b1bde ★☆
()

Это что, какая-то новая форма онанизма?

Deleted
()
Ответ на: комментарий от Xenius

А чем тебе эти опции помешали?

Чем хуже тем лучше же.

h578b1bde ★☆
()
Ответ на: комментарий от Deleted

Единственный ключ, вписанный в POSIX, и тот не сделали :) А всё остальное сделали, вот вам и mostly POSIX compatible GNU is not unix.

PS. "Вписанный в POSIX" это согласно старой редакции 2004 года, которую можно смотреть бесплатно http://pubs.opengroup.org/onlinepubs/009696699/utilities/cat.html. Хотя 2008 кажется тоже можно бесплатно.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 2)

полностью вырезает чтение опций.

Так нечестно! Давай делай патч, который обработку этих опций из всего кода вырезает, а то убрать getopt() за две секунды много ума не надо.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Апстриму всего ГНУтого софта давно пофиг на UNIX-Way и KISS. Если было бы не пофиг, XOrg, например, не получил бы такое широкое распространение.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Апстриму всего ГНУтого софта давно пофиг на UNIX-

ну так гну это ж не юникс xD

Deleted
()
Ответ на: комментарий от Deleted

Почему-то все замечают неюниксвейный systemd, но игнорируют намного более неюниксвейный и комбайный X.Org

Такие вот двойные стандарты Linux-тусовки.

EXL ★★★★★
()
Ответ на: комментарий от EXL

А какое отношение GNU имеет к Xorg, если не секрет? Про «пофиг на unix-way» тоже ну очень загадочное утверждение, но мне на него пофиг.

TeopeTuK ★★★★
()
Ответ на: комментарий от buddhist

Относительно небольшие файлы xz жмёт не лучше, а заголовок у него на байты больше:

597     gnu_coreutils-8.27-cat_unixway.patch.lzma
644     gnu_coreutils-8.27-cat_unixway.patch.xz
396     gnu_coreutils-8.27-ls_quoting.patch.lzma
444     gnu_coreutils-8.27-ls_quoting.patch.xz
Казалось бы разница небольшая, НО сектора на носителях по 512 байт. Поэтому даже один байт может оказаться решающим относительно того, например, 3 сектора будет занято файлом или 2. А неиспользованные файлами байты в занятых секторах, напоминаю, «сгорают» для использования.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от EXL

Я ж не для апстрима прошу, а для всех нас, кто тут собрался в топике! Нам не нужен нечестный патч! А то выложил

-  /* Parse command line options.  */
-
-  while ((c = getopt_long (argc, argv, "benstuvAET", long_options, NULL))
-         != -1)
-    {
-      switch (c)
-        {
-        case 'b':
-          number = true;
-          number_nonblank = true;
-          break;
-
-        case 'e':
-          show_ends = true;
-          show_nonprinting = true;
-          break;
-
-        case 'n':
-          number = true;
-          break;
-
-        case 's':
-          squeeze_blank = true;
-          break;
-
-        case 't':
-          show_tabs = true;
-          show_nonprinting = true;
-          break;
-
-        case 'u':
-          /* We provide the -u feature unconditionally.  */
-          break;
-
-        case 'v':
-          show_nonprinting = true;
-          break;
-
-        case 'A':
-          show_nonprinting = true;
-          show_ends = true;
-          show_tabs = true;
-          break;
-
-        case 'E':
-          show_ends = true;
-          break;
-
-        case 'T':
-          show_tabs = true;
-          break;
-
-        case_GETOPT_HELP_CHAR;
-
-        case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
-
-        default:
-          usage (EXIT_FAILURE);
-        }
-    }
-

с таким пафосом, как будто гигантскую работу во имя юниксвея выполнил. Мне кажется, он нас всех не уважает.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Я просто выложил для тех, кому нужно.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от TeopeTuK

К GNU-софту X.Org имеет пррмерно такое же отношение, что и Linux. Не смогли и не осилили написать своё — позаимствовали чужие костыли. Операционная система GNU на данный момент немыслима без Linux и X.Org, хотя, конечно, работы в этом плане ведутся (hurd).

EXL ★★★★★
()
Ответ на: комментарий от EXL

И ты считаешь это нормальным — обвинять разработчиков GNU в «грехах» софта, который они не разрабатывают? Ну ладно.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

Где я их обвиняю? Я говорю лишь про то, что GNU'шникам давно наплевать на UNIX-Way, раз они тащут в GNU/Linux комбайны по типу X.Org и делают громоздкие реализации всяких UNIX'овых cat'ов.

EXL ★★★★★
()

Я тебе вкусняшку принес! Сижу читаю как локализовать культёвое приложение:

http://doc.qt.io/qt-5/internationalization.html

For example, an application in a Cyrillic KOI8-R locale (the de-facto standard locale in Russia) ...

ОМФГ!!! Энжой! Культиваторы все еще думают что у нас тут кои во все поля...

deep-purple ★★★★★
()
Ответ на: комментарий от d_a

у echo нельзя, потому что тогда хэши нельзя будет через трубу считать потому что перевод каретки

да и просто в одну несколько раз echo сделать

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 1)

Надо уже юникод выпиливать из coreutils

GblGbl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.