Come passare l'argomento allo script che viene immesso in bash


10

In questo momento ho una linea come questa:

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

Sta scaricando lo script e lo passa a bash come file stdin. Vorrei eseguire questo script con ulteriori argomenti print.

Forse qualcosa del genere?

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

Ma questo non funziona.


4
Cosa ti aspetti printdi fare qui? Visualizza i comandi in esecuzione? Se è così, prova bash -x. Nota: questa curl | bashroutine è un enorme buco nella sicurezza; non puoi vedere cosa verrà eseguito fino a quando il tuo server non è stato sviluppato.
Stephen Harris,

Risposte:


16

Credo che ciò che stai cercando sia l' -sopzione. Con -s, è possibile passare argomenti allo script.

Come esempio fittizio per illustrare questo:

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

Qui puoi vedere che allo script fornito su stdin è assegnato il parametro posizionale Print. Il tuo script accetta un -u UUIDargomento e questo può essere adattato anche:

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

Quindi, nel tuo caso:

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

O,

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

Come ha sottolineato Stephen Harris, scaricare una sceneggiatura ed eseguirla, vista invisibile, è un problema di sicurezza.


3

Se il tuo sistema ha /dev/stdin, puoi usare

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

Do Non fare questo:

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

Se si desidera utilizzare --, procedere come segue:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.