bashの「読み取り」パイピングスクリプト

bashの「読み取り」パイピングスクリプト

bashbashを使用して直接実行するのではなく、パイプを介してスクリプトを実行する必要があります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

おすすめ記事