Bash

通過 curl 或 wget 執行 Web 腳本時出現語法錯誤

  • June 20, 2020

我不明白出了什麼問題。

通過執行bash腳本wgetcurl腳本因語法錯誤而中止時。雖然如果下載並作為本地文件執行它可以工作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

...

問題是read期望從標準輸入讀取,並且在您進行管道傳輸時失敗(它無法讀取您期望讀取的內容,而是讀取實際腳本的文本,該文本通過標準輸入管道輸入,導致通過有效地read從腳本中刪除語句之後的行來解決語法錯誤)。所以使用命令替換來執行內聯內容:

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

或者

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

引用自:https://unix.stackexchange.com/questions/593852