これらの構文を使用して、リモートbashスクリプトを実行する方法を知っています。
curl http://foo.com/script.sh | bash
または
bash < <( curl http://foo.com/script.sh )
同じ結果が得られます。
しかし、bashスクリプトに引数を渡す必要がある場合はどうなりますか?スクリプトがローカルに保存されている場合、次のことが可能です。
./script.sh argument1 argument2
私はこのようないくつかの可能性を試しましたが、成功しませんでした:
bash < <( curl http://foo.com/script.sh ) argument1 argument2
試す
curl http://foo.com/script.sh | bash -s arg1 arg2
bashマニュアルによると:
-sオプションが存在する場合、またはオプションの処理後に引数が残っていない場合、コマンドは標準入力から読み取られます。このオプションを使用すると、インタラクティブシェルを呼び出すときに位置パラメータを設定できます。
jinowolskiの答え を少し改善するには、次を使用する必要があります。
curl http://example.com/script.sh | bash -s -- arg1 arg2
2つのダッシュ(-)は、bashの引数としてそれに続くものを処理しないようにbashに指示していることに注意してください。
このように、それはあらゆる種類の引数で動作します、例えば:
curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable
これはもちろん、curlだけでなくstdinを介したあらゆる種類の入力で機能するため、echoを介した単純なBASHスクリプト入力で機能することを確認できます。
echo 'i=1; for a in $@; do echo "$i = $a"; i=$((i+1)); done' | \
bash -s -- -a1 -a2 -a3 --long some_text
あなたに出力を与えます
1 = -a1
2 = -a2
3 = -a3
4 = --long
5 = some_text
その他の選択肢:
curl http://foo.com/script.sh | bash /dev/stdin arguments
bash <( curl http://foo.com/script.sh ) arguments