init=/bin/bash rw
А этот "рв", что он там делает? Не будет ли это воспринято как аргумент в пользу bash? Сначала монтируется root, затем можно запускать /bin/bash.
curl -Ls <git-script-path> | bash -s -- -p admin
Это заставляет bash
считывать команды оболочки из своего стандартного потока ввода, который подключен к curl
. -p
и admin
— это два аргумента, которые будут доступны как позиционные параметры в скрипте. --
необходим, чтобы сигнализировать об окончании опций для исполняемого файла bash
.
Тестирование с помощью однострочного -скрипта в script.sh
, который только выполняет printf '"%s"\n' "$@"
(, выводит аргументы командной строки в кавычках на отдельных строках ). Мы позволим cat script.sh
стать опорой -для вашей curl
команды:
$ cat script.sh| bash -s -- -p admin
"-p"
"admin"
Если ваш скрипт требует интерактивности, вы не сможете прочитать сам скрипт из стандартного ввода. Вместо этого укажите сценарий через имя файла:
$ bash <( curl -Ls <git-script-path> ) -p admin
Это как раз то, что вы имеете в своем вопросе. Обратите внимание, что для этого требуется, чтобы текущая оболочка понимала замены процессов с помощью <(... )
.
Это можно сделать отдельными шагами. Сначала получите скрипт и поместите его в файл:
curl -sL https://...git > script.sh
Сделать его исполняемым:
chmod +x script.sh
И выполнить с параметрами:
./script.sh -p admin
Как анлайнер:
curl -sL https://...git > script.sh && chmod +x script.sh &&./script.sh -p admin
Если вы не хотите хранить скрипт постоянно, вы можете
tmpFile=$(mktemp) && curl -sL https://...git > $tmpFile && chmod +x $tmpFile && $tmpFile -p admin && rm $tmpFile
Если вы хотите передать скрипту аргументы, просто добавьте их в командную строку:
bash <(curl -Ls <git-script-path>) -p admin
Пример с командой для отображения только аргументов:
$ bash <(echo 'echo args: "$@"') -p admin
args: -p admin