通过curl或wget执行Web脚本时出现语法错误

通过curl或wget执行Web脚本时出现语法错误

我不明白出了什么问题。

bash通过wget或执行脚本时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

问题是它read期望从标准输入读取,并且在您进行管道传输时失败(它无法读取您期望读取的内容,而是读取实际脚本的文本,该文本正在标准输入上通过管道传输,从而导致通过read从脚本中有效删除语句后面的行来消除语法错误)。因此,请使用命令替换来内联执行内容:

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

或者

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

相关内容