Cómo pasar el argumento al script que se ingresa a bash

10

En este momento tengo una frase como esta:

curl -fsSL http://git.io/vvZMn | bash

Está descargando el script y pasándolo a bash como archivo stdin. Me gustaría ejecutar este script con argumentos adicionales print.

Tal vez algo como esto?

curl -fsSL http://git.io/vvZMn | bash -- print

Pero esto no funciona.

k06a
fuente
44
¿Qué esperas printhacer aquí? Mostrar los comandos que se ejecutan? Si es así, inténtalo bash -x. Nota: esta curl | bashrutina es un agujero de seguridad masivo; no se ve lo que se ejecutará hasta que su servidor haya sido pwned.
Stephen Harris el

Respuestas:

16

Creo que lo que estás buscando es la -sopción. Con -s, puede pasar argumentos al script.

Como un ejemplo ficticio para ilustrar esto:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

Aquí, puede ver que el script proporcionado en stdin recibe el parámetro posicional Print. Su script toma un -u UUIDargumento y eso también se puede acomodar:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

Entonces, en tu caso:

curl -fsSL http://git.io/vvZMn | bash -s -- print

O,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

Como señaló Stephen Harris, descargar un script y ejecutarlo, sin ser visto, es un problema de seguridad.

John1024
fuente
3

Si su sistema tiene /dev/stdin, puede usar

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

No no hacer esto:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

Si quieres usar --, haz esto:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
G-Man dice 'restablecer a Mónica'
fuente