Bash

Shell 腳本失敗:語法錯誤:“(”意外

  • June 11, 2021

我一直在編寫一個腳本,該腳本可以自動設置用於 Raspberry Pi 開發的開發環境(工作的分步詳細資訊在此處)。該腳本在該文章中連結,但您也可以在此處找到它。現在,當執行此腳本時,安裝並設置環境時不會出錯,但由於預設情況下 sudo 的超時值,您必須多次輸入 sudo 密碼。因此,我開始嘗試刪除所有 sudo 行並在命令行中通過 sudo 執行整個腳本,如下所示:

kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh

這可以按預期正常工作,並且在此之前大部分時間都可以完成:

./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected

現在,當不使用 sudo 執行整個腳本時,此行以前可以正常工作。這條線作為 sudo 執行並沒有什麼可以阻止它的工作,據我所知,有人有什麼想法嗎?

該腳本不以shebang行開頭,因此系統以/bin/sh. 在 Ubuntu 上,/bin/shdash,一個為快速啟動和執行而設計的 shell,只有標準功能。當破折號到達第 68 行時,它會看到一個語法錯誤:括號在上下文中對它沒有任何意義。

由於 dash(與所有其他 shell 一樣)是解釋器,因此在執行到達有問題的行之前它不會抱怨。因此,即使腳本在您的測試中的某個時間點成功啟動,一旦到達第 68 行,它也會中止。

shebang 行必須是文件中的第一件事。由於您使用 bash 功能,因此文件的第一行必須是#!/bin/bashor #!/usr/bin/env bash

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