Обязательна ли опция `command -v` в оболочке POSIX? Совместим с POSIX?

Я использую posh, чтобы протестировать мою оболочку script, которую я хочу успешно запустить в любой совместимой с POSIX оболочке. Выполняя это, я обнаружил, что параметр command -v не поддерживается в шикарном режиме. Также нет type.

Я понимаю, что type не поддерживается, потому что POSIX не требуется. Это обсуждается в https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=397601#10.

"type" - это расширение X/Open; обратите внимание на маркировку XSI в POSIX стандарт. Поскольку это не требуется POSIX или политикой debian, шикарный не реализует его.

http://pubs.opengroup.org/onlinepubs/009695399/utilities/type.html подтверждает это. В кратком обзоре см. Код поля [XSI].

Но я не понимаю, почему опция command -v не поддерживается в posh.

В некоторых упоминается, что command -v является необязательным в https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=218530#131.

И "команда -v" является необязательной функцией в соответствии с http://www.opengroup.org/onlinepubs/009695399/utilities/просто упомянуть об этом.

Но я не могу подтвердить это на http://pubs.opengroup.org/onlinepubs/009695399/utilities/command.html. Вы можете увидеть что-нибудь здесь, что указывает, что опция -v необязательна в command?

Если нет, то posh не соответствует POSIX?

Ответы

Ответ 1

Это зависит от того, с какой версией POSIX они совместимы. В материале POSIX 2004 command есть опции -v и -v в необязательной части стандарта - подмножество "Переносимость пользователя".

POSIX 2008 (с поправками, внесенными в 2013 году) не обозначает какую-либо часть спецификации command с подмножеством "Переносимость пользователя":

Сводка

command [-p] command_name [argument...]

command [-p][-v|-V] command_name

ОПИСАНИЕ

Утилита command должна заставить оболочку обрабатывать аргументы как простую команду, подавляя поиск функции оболочки, описанный в Command Search and Execution, item 1b.

Если command_name совпадает с именем одной из специальных встроенных утилит, специальные свойства в списке перечислений в начале специальных встроенных утилит не должны возникать. В любом другом отношении, если command_name не является именем функции, эффект command (без параметров) должен быть таким же, как и без command.

Когда используется опция -v или -v, утилита command должна предоставлять информацию о том, как интерпретируется интерпретацией командной оболочки оболочкой.

В версии 2008/2013 нет опциональных флагов. В старом (2004) стандарте опции -v и -v были частью подмножества пользовательской переносимости, а не частью ядра.

Итак, если они хотят соответствовать стандарту, которому больше десятилетия, нет необходимости в -v или -v; если они хотят соответствовать текущему стандарту (которому больше 5 лет), эти параметры должны поддерживаться.

Ответ 2

См. код поля [UP] рядом с определением -v. Per список обозначений кода маржи (выделено мной):

[UP] Пользовательская переносимость

Описанная функциональность не обязательна.

Если это применимо, утилиты помечены знаком легенды UP в разделе SYNOPSIS. Если для утилиты применяется дополнительная семантика, материал идентифицируется с использованием легенды маржи UP.

Таким образом, это черная буква POSIX: эта функция необязательна.