Bash'e girilen betiğe argüman aktarma


10

Şu anda böyle bir astar var:

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

Komut dosyasını indirip bash'e stdin dosyası olarak geçiriyor. Bu betiği ek argüman ile çalıştırmak istiyorum print.

Belki böyle bir şey?

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

Ama bu işe yaramıyor.


4
Burada ne printyapmayı umuyorsun? Çalıştırılan komutlar gösterilsin mi? Varsa, deneyin bash -x. Not: Bu curl | bashrutin büyük bir güvenlik deliğidir; sunucunuz bulana kadar nelerin çalıştırılacağını göremezsiniz.
Stephen Harris

Yanıtlar:


16

Aradığın şeyin -sseçenek olduğuna inanıyorum . İle -sbetiğe argümanlar iletebilirsiniz.

Bunu açıklamak için kukla bir örnek olarak:

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

Burada, stdin üzerinde sağlanan komut dosyasının konum parametresi verildiğini görebilirsiniz Print. Betiğiniz bir -u UUIDargüman alır ve bu da kabul edilebilir:

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

Yani, sizin durumunuzda:

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

Veya,

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

Stephen Harris'in işaret ettiği gibi, bir senaryoyu indirmek ve yürütmek, görünmeyen görme, bir güvenlik sorunudur.


3

Sisteminiz varsa /dev/stdin, aşağıdakileri kullanabilirsiniz:

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

Do not bunu:

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

Kullanmak istiyorsanız --, bunu yapın:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.