Übergeben eines Arguments an ein Skript, das in bash eingegeben wird

10

Im Moment habe ich einen Einzeiler wie diesen:

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

Es lädt ein Skript herunter und übergibt es als stdin-Datei an bash. Ich möchte dieses Skript mit zusätzlichen Argumenten ausführen print.

Vielleicht so etwas?

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

Das funktioniert aber nicht.

k06a
quelle
4
Was erwarten printSie hier zu tun? Anzeigen der ausgeführten Befehle? Wenn ja, versuchen Sie es bash -x. Hinweis: Diese curl | bashRoutine ist eine massive Sicherheitslücke. Sie sehen erst, was ausgeführt wird, wenn Ihr Server pwned wurde.
Stephen Harris

Antworten:

16

Ich glaube, was Sie suchen, ist die -sOption. Mit -skönnen Sie Argumente an das Skript übergeben.

Als Dummy-Beispiel, um dies zu veranschaulichen:

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

Hier können Sie sehen, dass das auf stdin bereitgestellte Skript den Positionsparameter erhält Print. Ihr Skript nimmt ein -u UUIDArgument und das kann auch berücksichtigt werden:

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

Also in Ihrem Fall:

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

Oder,

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

Wie Stephen Harris betonte, ist das Herunterladen und Ausführen eines Skripts ein Sicherheitsbedenken.

John1024
quelle
3

Wenn Ihr System hat /dev/stdin, können Sie verwenden

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

Mach das nicht :

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

Wenn Sie verwenden möchten --, gehen Sie folgendermaßen vor:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
G-Man sagt "Reinstate Monica"
quelle