bashへの入力であるスクリプトに引数を渡す方法


10

現在、私はこのようなワンライナーを持っています:

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

スクリプトをダウンロードし、それをstdinファイルとしてbashに渡します。追加の引数を指定してこのスクリプトを実行したいと思いますprint

たぶんこんな感じ?

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

しかし、これは機能しません。


4
あなたは何を期待しているprint、ここでやって?実行中のコマンドを表示しますか?その場合は、お試しくださいbash -x。注:このcurl | bashルーチンは大きなセキュリティホールです。サーバーがpwnされるまで、何が実行されるかはわかりません。
スティーブンハリス

回答:


16

あなたが探しているのは-sオプションだと思います。を使用-sすると、スクリプトに引数を渡すことができます。

これを説明するためのダミーの例として:

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

ここでは、stdinで提供されるスクリプトに位置パラメーターが指定されていることがわかりますPrint。スクリプトは-u UUID引数を取りますが、これにも対応できます。

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

したがって、あなたの場合:

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

または、

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

Stephen Harrisが指摘したように、スクリプトをダウンロードして実行することは、目に見えないことですが、セキュリティ上の問題です。


3

システムにがある場合は/dev/stdin

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

ではない次の操作を行います。

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

を使用する--場合は、次のようにします。

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.