curlまたはwgetを介してWebスクリプトを実行すると、構文エラーが発生します。

curlまたはwgetを介してWebスクリプトを実行すると、構文エラーが発生します。

私は何が間違っているのか分かりません。

bashwgetスクリプトの配信中または実行中にcurl構文エラーが発生したため、スクリプトが中断されました。ローカルファイルにダウンロードして実行すると機能しますがbash script.sh

wget -O- https://domain.com/script.sh | bash

curl https://domain.com/script.sh | bash

間違い:

bash: line 114: syntax error near unexpected token "fi"

コードは次のとおりです。

...

while [[ ! $db_database ]]; do
  echo
  read -p "MySQL Database: " db_database
done

if [[ -z $db_prefix ]]; then
  echo
  read -p "MySQL Table Prefix [lc_]: " db_prefix
  if [[ ! $db_prefix ]]; then
    db_prefix="lc_"
  fi                 # <-- This is the line, 114
fi

if [[ -z $db_collation ]]; then
  echo
  read -p "MySQL Collation [utf8_swedish_ci]: " db_collation
  if [[ ! $db_collation ]]; then
    db_collation="utf8_swedish_ci"
  fi
fi

...

答え1

問題は、readstdinから読み取ると予想してパイプするときに失敗することです(読み込むと予想されるものを読み取るのではなく、代わりにstdinからパイプされる実際のスクリプトのテキストを読み取るため、構文が発生します)。readスクリプトからステートメントの次の行を効果的に削除すると、エラーが削除されます。したがって、コマンド置換を使用してインラインで実行します。

bash -c "$(curl https://domain.com/script.sh)"

または

bash -c "$(wget -O- https://domain.com/script.sh)"

関連情報