sh
-совместимые сценарии оболочки, которые используют аргументы в командной строке, часто содержат либо $1
, $2
, $3
и т. д., либо $@
, либо $*
, либо их комбинации. Однако это не является ни необходимым, ни достаточным!
Этот скрипт выполняет поиск и возвращает все строки, содержащие такие строки.:
grep '\$[1-9@*]' script.sh
Вы можете получать ложные срабатывания от сценариев, которые не принимают аргументы командной строки, но содержат функции, принимающие аргументы, или сценариев, которые просто содержат эти символы в неоцененных строках. Если сценарий содержит, например, вызовы awk
, то они также могут содержать $1
и т. д., которые не относятся к аргументам командной строки самого сценария.
Вы также можете поискать строку getopt
в скрипте, чтобы узнать, использует ли скрипт getopt
или getopts
для правильного разбора командной строки.
Выявление случаев, когда аргументы командной строки могут использоваться неявно , немного сложнее. Это происходит, например, с for variablename; do... done
или select variablename; do... done
. Но если сценарий использовал set
для явного заполнения позиционных параметров, то это не затрагивает никаких аргументов командной строки. Чтобы разобраться в этом, может потребоваться визуальный осмотр сценария.
В «реальной жизни»можно было бы прочитать сопроводительную документацию. Если по какой-то странной причине это недоступно, прочтите код.
Я полагаю, что вам не хватает параметра --no-hostonly
из справочной страницы:
-H, --hostonly Host-Only mode: Install only what is needed for
booting the local host instead of a generic host.
-N, --no-hostonly Disables Host-Only mode
Еще одна распространенная проблема — пропустить пакет, от которого зависит модуль, например device-mapper-multipath
требуется перед добавлением модуля multipath
.