首頁 > 後端開發 > Golang > 主體

Makefile 中出現 Permission Denied 錯誤:如何解決 Go 腳本與直接執行之間的差異?

DDD
發布: 2024-10-23 15:33:02
原創
196 人瀏覽過

Permission Denied Error in Makefile: How to Resolve the Discrepancy Between Go Scripts and Direct Execution?

權限被拒絕錯誤已解決:了解Makefile 和直接Go 執行之間的差異

當嘗試從Makefile 執行Go 腳本時,您可能會遇到意外的「權限被拒絕」錯誤。這可能會令人困惑,特別是當您可以直接執行腳本而不會出現問題時。

罪魁禍首:路徑上名為「go」的目錄

明顯的不一致由於 GNU make 中的錯誤而出現。具體來說,如果 PATH 上的任何目錄中有名為「go」的目錄,就會出現此問題。該目錄不應包含任何子目錄,但它的存在可能會導致 make 呼叫該目錄本身而不是 Go 執行檔。

要驗證這是否是導致錯誤的原因,請檢查您的 PATH 並找到名為的任何目錄包含子目錄的「go」。例如,如果 /usr/bin 位於您的 PATH 上,則 /usr/bin/go/ 等目錄路徑可能會導致問題。

解決問題:刪除或重新命名目錄

最直接的解決方案是從 PATH 中刪除「go」目錄。或者,您可以將該目錄重新命名為“go”以外的名稱。一旦你相應地修改了 PATH,你應該可以從 Makefile 執行 Go 腳本,而不會遇到權限被拒絕的錯誤。

使用Shell 強制GNU Make 呼叫可執行檔

如果刪除或重新命名「go」目錄不可行,您可以透過確保GNU make 在執行Go 執行文件之前會呼叫shell 來解決該問題。要實現此目的,只需在 Makefile 目標末尾添加一個特殊字符,例如分號“;”:

run:
         go run . ;
登入後複製

此解決方法指示 GNU make 首先調用 shell,然後執行Go 腳本。

了解'run' 和'run2' 目標之間的差異

在您提供的範例中, 'run' 目標直接呼叫「go run 。」沒有任何特殊字元。由於您的 PATH 上可能有一個「go」目錄,GNU 會嘗試執行該目錄本身,從而導致權限被拒絕錯誤。

另一方面,「run2」目標使用 echo 指令來執行在執行 Go 腳本之前輸出一個字串。這個附加指令可確保 GNU make 呼叫 shell,從而解決錯誤。

以上是Makefile 中出現 Permission Denied 錯誤:如何解決 Go 腳本與直接執行之間的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!