Проверьте наличие нескольких зависимостей и сообщите статус конечным пользователям
for cmd in "latex" "pandoc"; do
printf "%-10s" "$cmd"
if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done
Пример вывода:
latex OK
pandoc missing
Настройте 10
на максимальную длину команды. Не автоматический, потому что я не вижу многословного способа POSIX: Как выровнять столбцы таблицы, разделенной пробелом, в Bash?
Глагол определения функций не разрешает вызовы с дополнительными пунктирными именами; синтаксис ограничивается пунктирными именами и необязательным вызовом в конце :
decorated ::= decorators (classdef | funcdef)
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
dotted_name ::= identifier ("." identifier)*
Обратите внимание, что это не полное выражение, но очень ограниченное подмножество.
Это перекликается с PEP, который гласит:
Оператор декоратора ограничен тем, что он может принять, - произвольные выражения не будут работать. Гвидо предпочел это из-за чувства кишки [17].
blockquote>и
Обоснование наличия функции, возвращающей декоратор, состоит в том, что часть после Знак @ можно считать выражением (хотя синтаксически ограничивается только функцией), и все, что возвращает это выражение, вызывается. См. Декларационные аргументы [16].
blockquote>Акцент мой.
Обоснование заключается в том, что Гвидо считает, что нет реального варианта использования для разрешения :
Поэтому, хотя в будущем было бы довольно легко изменить синтаксис на @test, я хотел бы придерживаться более ограниченной формы, если не будет представлен реальный прецедент, где позволяя @test повысить читаемость. (@foo () не работает, потому что я не ожидаю, что вам это понадобится).
blockquote>Вам нужно будет убедить Guido и других основных разработчиков что ваш случай - это надлежащая утилита, достойная отмены этих ограничений!