Como passar o argumento ao script que é entrada para o bash

8

Agora eu tenho uma linha como esta:

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

Faz o download do script e o passa para o bash como arquivo stdin. Eu gostaria de executar este script com argumento adicional print .

Talvez algo assim?

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

Mas isso não funciona.

    
por k06a 27.08.2016 / 01:15

2 respostas

12

Acredito que o que você está procurando é a opção -s . 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 recebe um argumento -u UUID e 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.

    
por 27.08.2016 / 01:38
2

Se o seu sistema tiver /dev/stdin , você poderá usar

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

Não faça isso:

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

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

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
    
por 27.08.2016 / 10:31