Цитата Раймонда @jasonwryan содержит некоторую полезную информацию, но начинается в середине истории:
'-'
. У Bitsavers есть руководство для пользовательских команд . '/'
используется для TOPS и VMS), а некоторые меньше (например, '('
, используемых в VM / SP CMS). -print
vs -pr
(стр. 3-8). getopt
. не был частью оригинальной Unix, есть утилиты, которые не использовали getopt
и были оставлены как есть. Но наличие getopt
помогло согласовать программы. С другой стороны. стороны, параметры Unix, использующие getopt
, были односимвольными. В других системах, в частности во всех более крупных, использовались ключевые слова. Некоторые (не все) позволяли сокращать эти ключевые слова , т. е. не все персонажи пр При условии, что вариант был однозначным. В этом тесте на двусмысленность есть подводные камни.Например:
sta
, думая получить статус
. Это было сокращение для start
, и, ничего не давая start , командный интерпретатор отключил меня. -v
(для версии) перед -vb
(визуальный звонок). В X Toolkit нет прямого способа указать предпочтительный вариант в случае неоднозначности. Из-за этой возможности двусмысленности некоторые разработчики предпочитают не допускать сокращений. Lynx , например, использует многосимвольные параметры без использования сокращений.
Не все программы использовали getopt
: tar
и ps
не использовали. Также не было rcs
(или sccs
), как вы можете видеть, заметив, где тире было необязательным, а значения опций - необязательными.
Принимая все это во внимание, разработчики GNU адаптировали параметры ключевых слов, используемые в других системах, расширив getopt
, чтобы предоставить длинную версию каждой короткой опции. Например, textutils 1.0 в журнале изменений указано
Tue May 8 03:41:42 1990 David J. MacKenzie (djm at abyss)
* tac.c: Use regular expressions as the record boundaries.
Give better error messages.
Reformat code and make it more readable.
(main): Use getopt_long to parse options.
Изменение в fileutils было раньше:
Tue Oct 31 02:03:32 1989 David J. MacKenzie (djm at spiff)
* ls.c (decode_switches): Add long options, using getopt_long
instead of getopt.
, и кто-то может найти его еще раньше, но кажется, что заголовок файла показывает самую раннюю дату:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
, которая (например) совпадает с X Инструментарий (1987). Большинство знакомых вам утилит Unix (например, ls
, ps
) используют существующие односимвольные параметры, которые требуют периодического посещения руководства. Представляя getopt_long
, разработчики GNU не делали этого, сначала добавляя новые параметры; они начали с того, что составили таблицу существующих вариантов и предоставили соответствующий длинный вариант.
Поскольку они добавляли к существующему репертуару, возникла (снова) проблема конфликта с существующими вариантами. Чтобы избежать этого, они изменили синтаксис, используя два дефиса перед длинными параметрами.
Эти программы продолжают использовать getopt_long
таким образом по обычным причинам:
Вам нужно будет реализовать следующее:
Хотя это и не невозможно, это потребует некоторой доработки.
Обычный способ централизованного управления пользователями для Unix/Linux — настроить сервер LDAP для хранения соответствующих данных. А затем настройте Keycloak для использования этого LDAP-сервера для получения пользовательских данных и проверки паролей.
Существуют готовые -для -решения для использования, такие как FreeIPA или мои собственные Æ -DIR .