script - Pasar parámetros a bash cuando se ejecuta una secuencia de comandos recuperada por curl
scripts bash ejemplos (3)
Otras alternativas
curl http://foo.com/script.sh | bash /dev/stdin arguments
bash <( curl http://foo.com/script.sh ) arguments
Sé cómo ejecutar script de bash remoto, a través de estas sintaxis:
curl http://foo.com/script.sh | bash
o
bash < <( curl http://foo.com/script.sh )
que dan el mismo resultado
Pero, ¿y si necesito pasar argumentos al script bash? Es posible cuando el script se guarda localmente:
./script.sh argument1 argument2
Intenté varias posibilidades como esta, sin éxito:
bash < <( curl http://foo.com/script.sh ) argument1 argument2
Para mejorar un poco la respuesta de jinowolski , debes usar:
curl http://example.com/script.sh | bash -s -- arg1 arg2
Observe los dos guiones (-) que le dicen a bash que no procese nada siguiendo eso como argumentos para bash.
De esta forma funcionará con cualquier tipo de argumentos, por ejemplo:
curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable
Esto, por supuesto, funcionará con cualquier tipo de entrada a través de stdin, no solo curl, para que pueda confirmar que funciona con la simple entrada de script BASH a través de echo:
echo ''i=1; for a in $@; do echo "$i = $a"; i=$((i+1)); done'' | /
bash -s -- -a1 -a2 -a3 --long some_text
Te dará la salida
1 = -a1
2 = -a2
3 = -a3
4 = --long
5 = some_text
tratar
curl http://foo.com/script.sh | bash -s arg1 arg2
Bash manual dice:
Si la opción -s está presente, o si no quedan argumentos después del procesamiento de la opción, los comandos se leen desde la entrada estándar. Esta opción permite configurar los parámetros posicionales cuando se invoca un shell interactivo.