Cara meneruskan argumen ke skrip yang merupakan input ke bash

10

Saat ini saya punya satu-liner seperti ini:

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

Itu sedang mengunduh skrip dan meneruskannya ke bash sebagai file stdin. Saya ingin menjalankan skrip ini dengan argumen tambahan print.

Mungkin kira-kira seperti ini?

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

Tetapi ini tidak berhasil.

k06a
sumber
4
Apa yang kamu harapkan printdari sini? Tampilkan perintah yang sedang dijalankan? Jika ya, coba bash -x. Catatan: curl | bashrutin ini adalah lubang keamanan besar; Anda tidak dapat melihat apa yang akan dijalankan sampai server Anda telah dikonfigurasikan.
Stephen Harris

Jawaban:

16

Saya percaya apa yang Anda cari adalah -spilihannya. Dengan -s, Anda bisa meneruskan argumen ke skrip.

Sebagai contoh tiruan untuk menggambarkan ini:

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

Di sini, Anda dapat melihat bahwa skrip yang disediakan pada stdin diberikan parameter posisi Print. Script Anda mengambil -u UUIDargumen dan itu dapat diakomodasi juga:

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

Jadi, dalam kasus Anda:

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

Atau,

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

Seperti yang ditunjukkan Stephen Harris, mengunduh skrip dan menjalankannya, tidak terlihat, merupakan masalah keamanan.

John1024
sumber
3

Jika sistem Anda memiliki /dev/stdin, Anda dapat menggunakan

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

Jangan tidak melakukan hal ini:

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

Jika Anda ingin menggunakan --, lakukan ini:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
G-Man Mengatakan 'Reinstate Monica'
sumber