bash
bashを使用して直接実行するのではなく、パイプを介してスクリプトを実行する必要がありますwget
。
$ wget -O - http://example.com/my-script.sh | bash
私のスクリプトread
にステートメントがあるため動作しません。何らかの理由でbashにパイプすると機能しません。
# Piping to bash works in general
$ echo 'hi'
hi
$ echo "echo 'hi'" | bash
hi
# `read` works directly
$ read -p "input: " var
input: <prompt>
# But not when piping - returns immediately
$ echo 'read -p "input: " var' | bash
$
読み取りコマンドはinput:
、値を求めるメッセージを表示せずに直接渡されますbash
。
read
スクリプトをパイプする方法を知っている人はいますかbash
?
ベストアンサー1
read
標準入力から読み出します。しかし、bashプロセスの標準入力はスクリプトによって得られました。シェルによっては、read
シェルがすでにスクリプト全体を読み込んで解析しているため、何も読み取れなかったり、スクリプトread
で予測できない行が消費されます。
簡単な解決策:
bash -c "$(wget -O - http://example.com/my-script.sh)"
この特定のシナリオのための良い解決策を説明するのではなく、教育目的のためのより複雑な解決策です。
echo '{ exec </dev/tty; wget -O - http://example.com/my-script.sh; }' | bash