簡単なスクリプトがあります。
# test.sh
read -p ">> " user
read -p ">> " -n1 yes
echo
echo "user: $user"
echo "yes: $yes"
実行すると、値の入力を求められ、その値がsumbash test.sh
変数に保存されます。だから出力は次のようになりますuser
yes
user@host:~/static/dcc$ bash test.sh
>> foo
>> b
user: foo
yes: b
しかし、cat test.shがbashにパイプされていると機能しません。代わりに、読み込みはuser
入力を要求せず、その後のすべてを食べて変数に保存します。
user@host:~/static/dcc$ cat test.sh | bash
user: read -p ">> " -n1 yes
yes:
プロセスオーバーライドではうまくいきますが、bashがsudoで実行されている場合は機能しません(これは私が必要とするものです)
user@host:~/static/dcc$ bash <(cat test.sh)
>> user
>> y
user: user
yes: y
user@host:~/static/dcc$ sudo bash <(cat test.sh)
bash: /dev/fd/63: No such file or directory
実際のケースでは、カールを使用してネットワークからスクリプトを取得し、 sudo を使用しているかのように実行しようとしています。可能であれば、スクリプトを最初にダウンロードする追加の手順を避けたいと思います。
ベストアンサー1
まあ、read
stdinから読んだ後、stdinを通して残りのスクリプトを提供します...したがって動作しません。
このファイルをダウンロードする必要があります。代替トリックはうまく機能しますが、うまく機能します。 sudo が呼び出されるシェルではなく、sudo が呼び出されるシェルで実行されます。これを簡単に回避できます。
sudo bash -c 'bash <(curl https://scripttodownload)'