問題:
當(dāng)使用ssh執(zhí)行遠程命令或者遠程服務(wù)器的運行腳本時糯俗,報錯:can‘t find .....這里我碰到的是go里面的滨砍,見下圖:
我配置的gopath在/home/go下面况木,本質(zhì)的問題還是找不到自定義的環(huán)境變量奋隶;但是直接用ssh登錄到遠程服務(wù)器上面以后饵骨,再執(zhí)行相應(yīng)的腳本時成功的。
查閱資料發(fā)現(xiàn)啤贩,這兩種方式使用的bash模式不同(bash:shell的一種扣溺,也是現(xiàn)在大部分的linux的發(fā)行版本,shell就簡單理解成命令行解釋器吧)
首先瓜晤,先解釋一下linux下面的四種bash模式:
- login shell:
When you log onto the system use password
表示當(dāng)你登錄使用用戶名密碼到服務(wù)器上的時候,會得到一個login shell
在終端使用--login會得到一個交互式的login shell
在腳本中使用--login會得到一個非交互式的login shell(非交互式:執(zhí)行完腳本就退出)
使用su -切換用戶會得到此用戶login shell
- non-login shell
除了上面的情況腹纳,得到的都是non-login shell痢掠。不需要使用密碼重復(fù)登錄獲取shell得到的都是non-login shell。比如:
window登錄到linux嘲恍,然后再使用圖形化界面登錄就不需要密碼足画,是non-login shell
在當(dāng)前的bash下面再執(zhí)行一個bash指令,也是一個non-login shell佃牛。
簡單來說淹辞,不需要用戶名密碼的都是non-login shell
- interactive
交互式
4.non-interactive
非交互式
其中1和2是或者的關(guān)系,3和4也是或者的關(guān)系
1和2的shell 模式?jīng)Q定了配置文件的加載方式7馈O笞骸!
一:使用ssh登錄到服務(wù)器再執(zhí)行腳本或者命令
使用的bash模式: interactive + login shell
加載的配置文件方式(按照先后順序爷速,找到退出)
/etc/profile
~/.bash_profile ~/.bash_login ~/.profile
二:使用ssh執(zhí)行遠程命令和腳本
使用的bash模式:non-interactive+non-login shell
加載的配置文件方式(按照先后順序央星,找到退出)
~/.bashrc
出現(xiàn)的原因:
由于~/.bashrc中沒有配置相關(guān)自定義的環(huán)境變量,所以找不到配置的gopath惫东,默認在/root目錄下面找莉给,找不到所需的文件
解決問題:
可以在~/.bashrc里面配置自己所需要的環(huán)境變量
參考資料:
shell 模式參考資料:https://likegeeks.com/linux-environment-variables/