Подтвердить что ты не робот

Передавая параметры 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
4b9b3361

Ответ 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