在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found)
在 SHELL 腳本中調(diào)用另一個 SHELL 腳本(報錯: go: not found)
在 SHELL 腳本中調(diào)用另一個 SHELL 腳本
在Linux平臺上開發(fā),經(jīng)常會在console(控制臺)上執(zhí)行另外一個腳本文件,經(jīng)常用的方法有:./my.sh 或 source my.sh 或 . my.sh;這三種方法有什么不同呢?
一個腳本sudo調(diào)另外一個腳本,報錯(報錯: go: not found)
問題:A 腳本調(diào) B腳本,如下:sudo ./build.sh 報錯 B腳本中的 ./build.sh: 5: go: not found。但是單獨(dú)運(yùn)行B腳本沒有問題。
問題分析:這個問題可能的原因是:
1.A腳本和B腳本使用了不同的環(huán)境變量配置
可能A腳本執(zhí)行時修改或重置了環(huán)境變量,導(dǎo)致B腳本運(yùn)行時無法找到go執(zhí)行環(huán)境。
可以在A腳本末尾打印出PATH變量,然后再運(yùn)行B腳本,看PATH變量是否被改變。
也可以嘗試在A腳本執(zhí)行后手動將PATH重置到原來狀態(tài)。
2.A腳本切換了用戶身份
一些腳本會用su或sudo來切換用戶,從而切換到一個不同的執(zhí)行環(huán)境。
可以檢查下A腳本是否切換了用戶,如果是的話,需要保證切換后的用戶也能找到go執(zhí)行環(huán)境。
3.A腳本中執(zhí)行了chroot等操作
如果A腳本執(zhí)行了chroot等操作,可能會使B腳本運(yùn)行在一個被隔離的環(huán)境中,從而找不到命令。
使用 sudo 會切換到 root 用戶身份執(zhí)行腳本,而 root 用戶默認(rèn)情況下并沒有配置 GO 相關(guān)的環(huán)境變量??梢詸z查一下:
sudo env
查看環(huán)境變量,是否存在 GO 相關(guān)的配置which go
在 sudo 下是否能找到 go 命令執(zhí)行 sudo which go 反而找不到go了
解決方法是:
- 不使用 sudo 執(zhí)行 A 腳本,而是提前配置好用戶權(quán)限,直接用普通用戶執(zhí)行
- 在 sudo 前面保留用戶環(huán)境變量,例如:
sudo env "PATH=$PATH" ./A.sh
- 為 root 用戶配置 GO 相關(guān)環(huán)境變量
- 在 A 腳本中使用 su 切換用戶,而不是 sudo
使用 sudo 執(zhí)行腳本時,會切換到 root 用戶身份,這個環(huán)境默認(rèn)情況下可能沒有配置相關(guān)的環(huán)境變量和命令路徑。
而使用 su 切換用戶可以保留更多原始用戶的環(huán)境配置。
總之,需要確保在 A 腳本中切換的用戶環(huán)境下,也能正常找到 go 命令執(zhí)行。
到此這篇關(guān)于在 SHELL 腳本中調(diào)用另一個 SHELL 腳本(報錯: go: not found)的文章就介紹到這了,更多相關(guān)shell腳本調(diào)用另一個shell腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- go語言import報錯處理圖文詳解
- Go語言將string解析為time.Time時兩種常見報錯
- 解決MySQL報錯:The last packet sent successfully to the server was 0 milliseconds ago.
- go?mod?tidy報錯解決方法詳解
- go引入自建包名報錯:package?XXX?is?not?in?std解決辦法
- goland安裝1.7版本報錯Unpacked?SDK?is?corrupted解決
- Django-Xadmin后臺首頁添加小組件報錯的解決方案
- Django報錯TemplateDoesNotExist的問題及解決
- 解決MongoDB?位置查詢報錯planner?returned?error:?unable?to?find?index?for?$geoNear?query的問題
- django報錯設(shè)置auth User的解決
- 解決Oracle?DISTINCT?報錯?inconsistent?datatypes:?expected?-?got?CLOB(數(shù)據(jù)類型不一致:?應(yīng)為?-,?但卻獲得?CLOB)的問題
- Java中報錯org.springframework.jdbc.UncategorizedSQLException的多種解決方法
- 執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory
- Go導(dǎo)入不同目錄下包報錯的解決方法
- 解決MongoDB6.0報錯:"mongo"不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件
- maven報錯:Failed to execute goal on project問題及解決
- Mongodb啟動報錯完美解決方案:about to fork child process,waiting until server is ready for connections.
- golang中package?is?not?in?GOROOT報錯的真正解決辦法
- Go語言報錯:'godoc'?不是內(nèi)部或外部命令,也不是可運(yùn)行的程序(godoc無法使用處理)解決方法
相關(guān)文章
shell 使用數(shù)組作為函數(shù)參數(shù)的方法(詳解)
下面小編就為大家?guī)硪黄猻hell 使用數(shù)組作為函數(shù)參數(shù)的方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04