Jak przekazać argument do skryptu, który jest wprowadzany do bash


10

W tej chwili mam taki jeden liner:

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

Pobiera skrypt i przekazuje go do bash jako plik stdin. Chciałbym uruchomić ten skrypt z dodatkowym argumentem print.

Może coś takiego?

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

Ale to nie działa.


4
Czego tu oczekujesz print? Wyświetlać uruchamiane polecenia? Jeśli tak, spróbuj bash -x. Uwaga: Ta curl | bashprocedura jest ogromna dziura bezpieczeństwa; nie zobaczysz, co zostanie uruchomione, dopóki serwer nie zostanie włożony.
Stephen Harris

Odpowiedzi:


16

Wierzę, że to, czego szukasz, jest -sopcją. Za pomocą -smożesz przekazać argumenty do skryptu.

Jako obojętny przykład ilustrujący to:

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

Tutaj widać, że skrypt podany na stdin otrzymuje parametr pozycyjny Print. Twój skrypt wymaga -u UUIDargumentu, który można również uwzględnić:

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

W twoim przypadku:

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

Lub,

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

Jak zauważył Stephen Harris, pobranie skryptu i wykonanie go, niewidoczne dla wzroku, stanowi problem bezpieczeństwa.


3

Jeśli twój system ma /dev/stdin, możesz użyć

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

Czy nie to zrobić:

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

Jeśli chcesz użyć --, zrób to:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.