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