読み取りコマンドはローカルで動作しますが、wgetは失敗します。

読み取りコマンドはローカルで動作しますが、wgetは失敗します。

単純な.shスクリプトを使用しているので、read一緒にコマンドを使用しようとしています。wget

# echo "Please answer by : -> yes <- or -> no <-"
# read answer
# echo $answer

このコードはローカルではうまく機能しますが、readコマンドはリモートで失敗しwget、応答を待たずに完了します。

# wget -qO - 'https://testserver/pub/test.sh' | bash -x
# + echo 'Please answer by : -> yes <- or -> no <-'
# Please answer by : -> yes <- or -> no <-
# + read answer
#

ご協力ありがとうございます。

ベストアンサー1

bash端末でスクリプトを実行すると、bashは標準入力(一つしかありません)キーボードから。

keyboard -> script

スクリプトをbashパイプに供給すると、パイプは次のようになります。標準入力。したがって、次のようにすると、問題はwgetとは関係ありません。

cat test.sh | bash -x

入力がキーボードではなくパイプから出てくるので、同じ動作をします。スクリプトはbashそれを継承します。標準入力

pipe -> script

パイプラインのデータが完了すると、bashとスクリプトも完了します。

この問題を解決する1つの方法はダウンロードして実行することです(必ずしもそうではありませんが、-O行をそのまま維持したい)。このような:

$ wget -qO test.sh 'https://testserver/pub/test.sh' && bash test.sh

おすすめ記事