Como passar argumento para script que é entrada para bash


10

Agora eu tenho uma linha como esta:

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

Ele está baixando o script e passando para o bash como arquivo stdin. Eu gostaria de executar este script com argumentos adicionais print.

Talvez algo assim?

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

Mas isso não funciona.


4
O que você espera printfazer aqui? Exibir os comandos que estão sendo executados? Se sim, tente bash -x. Nota: essa curl | bashrotina é uma enorme falha de segurança; você não vê o que será executado até que seu servidor seja instalado.
Stephen Harris

Respostas:


16

Acredito que o que você está procurando é a -sopção. Com -s, você pode passar argumentos para o script.

Como um exemplo fictício para ilustrar isso:

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

Aqui, você pode ver que o script fornecido no stdin recebe o parâmetro posicional Print. Seu script usa um -u UUIDargumento e isso também pode ser acomodado:

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

Então, no seu caso:

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

Ou,

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

Como Stephen Harris apontou, baixar um script e executá-lo, sem ser visto, é uma preocupação de segurança.


3

Se o seu sistema possui /dev/stdin, você pode usar

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

Você não fazer isso:

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

Se você deseja usar --, faça o seguinte:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.