Передавая параметры bash при выполнении script, выбранных с помощью curl
Я знаю, как выполнить удаленный bash script через эти синтаксисы:
curl http://foo.com/script.sh | bash
или
bash < <( curl http://foo.com/script.sh )
которые дают тот же результат.
Но что, если мне нужно передать аргументы в bash script? Это возможно, когда script сохраняется локально:
./script.sh argument1 argument2
Я попробовал несколько возможностей, подобных этой, без успеха:
bash < <( curl http://foo.com/script.sh ) argument1 argument2
Ответы
Ответ 1
попробовать
curl http://foo.com/script.sh | bash -s arg1 arg2
bash руководство говорит:
Если присутствует опция -s или нет аргументов после обработки опций, тогда команды считываются со стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.
Ответ 2
Чтобы улучшить jinowolski answer, вы должны использовать:
curl http://example.com/script.sh | bash -s -- arg1 arg2
Обратите внимание на две дефисы (-), которые сообщают bash, чтобы не обрабатывать что-либо, следуя за ним в качестве аргументов bash.
Таким образом, он будет работать с любыми аргументами, например:
curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable
Это, конечно, будет работать с любым видом ввода через stdin, а не только с завихрением, поэтому вы можете подтвердить, что он работает с простым входом bash script через echo:
echo 'i=1; for a in [email protected]; do echo "$i = $a"; i=$((i+1)); done' | \
bash -s -- -a1 -a2 -a3 --long some_text
Выдает вывод
1 = -a1
2 = -a2
3 = -a3
4 = --long
5 = some_text
Ответ 3
Другие альтернативы:
curl http://foo.com/script.sh | bash /dev/stdin arguments
bash <( curl http://foo.com/script.sh ) arguments