Почему POSIX, Находят Параметры Отличающимися от Других стилей Программы?

Запустите при помощи времени согласно предложению Jon Lin:

$ time ls test
test

real    0m0.004s
user    0m0.002s
sys     0m0.002s

Вы не говорите, на каком Unix Ваши сценарии работают, но strace на Linux, связка на Солярисе/AIX, и я думаю, что социалистическая коалиция на hp-ux позволила Вам узнать много о том, что делает процесс. Мне нравится-c опция strace получить хорошую сводку:

]$ strace -c ls
test
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 89.19    0.000998         998         1           execve
 10.81    0.000121         121         1           write
  0.00    0.000000           0        12           read
  0.00    0.000000           0        93        79 open
  0.00    0.000000           0        16           close
  0.00    0.000000           0         2         1 access
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           ioctl
  0.00    0.000000           0         4           munmap
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         6           mprotect
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0        30           mmap2
  0.00    0.000000           0         8         7 stat64
  0.00    0.000000           0        13           fstat64
  0.00    0.000000           0         2           getdents64
  0.00    0.000000           0         1           fcntl64
  0.00    0.000000           0         1           futex
  0.00    0.000000           0         1           set_thread_area
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
  0.00    0.000000           0         1           socket
  0.00    0.000000           0         1         1 connect
------ ----------- ----------- --------- --------- ----------------
100.00    0.001119                   205        88 total

Действительно также обратите внимание, что присоединение этих программ типа трассировки может замедлить программу несколько.

4
11.06.2013, 03:36
3 ответа

Обратите внимание, что POSIX находит, делает варианты поддержки как другие команды, и -- отметить конец их как другие команды. Это -H и -L.

-print, -type... не опции, их иногда называют предикатами. Они - аргументы, вопросы порядка которых, которые появляются после путей к файлам, которые самих появляются после опций. Вы также добрались ( и !. Вместе, они создают выражение, которое используется для определения что файлы найти.

find не единственный. [ (иначе test) и expr другие команды, аргументы которых используются для создания выражения.

Как find, [ имеет операторы, которые запускаются с - и больше, чем одна буква (-gt, -eq...).

Как find, test имеет проблемы, где те операторы могут быть перепутаны с операндами.

find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]

Если $file2 !, это - проблема с find. Если это =, это - проблема с (некоторыми) [.

Для всего из find, test и expr, использование опций создать выражение действительно не работало бы. Другая опция, возможно, состояла в том, чтобы оценить одну строку как выражение как awk или sed. как для

find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +

Сделайте:

find 'found = 0
      if (typeof($f) == "f") {
        if (age($f) > 1) found=1
      } else if (age($f) < age("x")) found = 1
      if ($found) exec_multi("ls -ld {}")' f1 f2

Но это означает реализовывать синтаксический анализатор грамматики в find. Это также означает потенциальный кошмар заключения в кавычки для "x" и командная строка выше.

На самом деле Исследование AT&T действительно придумывало такую команду: tw (дерево Уокер), но даже при том, что это - теперь открытый исходный код, я не знаю, что это действительно используется из AT&T.

6
27.01.2020, 20:46
  • 1
    dd другая утилита POSIX, которая имеет совсем другую конвенцию аргумента. –  Shawn J. Goff 08.06.2013, 15:12
  • 2
    @ShawnJ.Goff, да, положительная сторона, хотя в этом случае, это не ни на каком серьезном основании. –  Stéphane Chazelas 25.04.2014, 13:29

find является более старым, чем конвенция GNU использования -- для опций мультибуквы. GNU представил эту конвенцию повредить существующее несоответствие между программами с однобуквенными опциями, к который -bar предназначенный эти три опции -b -a -r, и программы с опциями нескольких-букв, к который -bar предназначенный единственная опция тем именем. К тому времени, когда GNU прибыл, он мог влиять на будущие программы, но не изменить существующие программы такой как find или другие, такие как утилиты X11.

find б/У - как префикс к предикатам и действиям, потому что они несколько похожи на опции: они - ключевые слова, часть конечного множества, которое значимо для конкретной команды. Хотя они не анализируются как опции, они лексикографически похожи на опции.

6
27.01.2020, 20:46

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

То, что необходимо понять, - то, что не было никакого стандарта для начала для определения опций и аргументов (как параметры командной строки к программам). Различные программы реализовали различные способы сделать вещи. В какой-то момент единственный тире для опций и нетире для аргументов стали, снова использовал/копировал от часто используемых команд и версии getopt стал доступным, оба для оболочек, а также для версий в C. (Я помню имевший для компиляции моей собственной версии, потому что *отклоняют, я продолжил работать, не имел его в библиотеке).

Конечно, единственный тире, односимвольные опции соответствовали tty ограничениям (то же, которое приводит к сокращенным командам (cp по сравнению с. copy), но где не сам объяснительный. Разработчики находки, вероятно, приняли решение удлинить отдельный символ опции для большей ясности, а также больше, чем 26 опций символа нижнего регистра. Они сделали так перед двойным тире -- поскольку долгие опции стали популярными (середина девяностых IIRC).

Исходная страница справочника имела следующее внизу:

BUGS
     The syntax is painful.
2
27.01.2020, 20:46
  • 1
    ddстиль опции является одинаково уникальным :) –  sendmoreinfo 09.06.2013, 18:49

Теги

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