出於安全方面的考慮,使用sudo執行命令將在乙個最小化的環境中執行,環境變數都重置成預設狀態。所以path這個變數不包括使用者自定義設定的內容
在sudo使用者的主目錄裡的.bashrc中新增如下內容即可解決
$ vim ~/.bashrc
alias sudo="sudo env path=$path"
有這樣乙個shell指令碼,其內容如下,沒有給其x許可權
vim test.sh
#!/bin/bash
echo "$"
# 執行該指令碼,可以看到echo輸出的結果
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
# 但是加上sudo,上述結果就不顯示了,而是乙個系統預設的$變數結果
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ sudo bash test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 因其沒有x許可權,所以無法這樣執行
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ sudo ./test.sh
sudo: ./test.sh: command not found
# 給該指令碼加上x許可權
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ chmod a+x test.sh
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ ll
total 4
-rwxrwxr-x 1 test_ops test_ops 28 sep 11 11:55 test.sh
# 可以執行,但結果相同
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ sudo ./test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 在使用者的主目錄裡的.bashrc中新增如下內容
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ vim ~/.bashrc
alias sudo="sudo env path=$path"
# 退出登陸後再次執行,其結果正是自己想要的效果
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ sudo ./test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ sudo bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$ ./test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
[test_ops@iz2zej3o3e9be3aoukimfzz ~]$
參考連線: linux執行遠端命令找不到環境變數
我配置的gopath在 home go下面,本質的問題還是找不到自定義的環境變數 但是直接用ssh登入到遠端伺服器上面以後,再執行相應的指令碼時成功的。查閱資料發現,這兩種方式使用的bash模式不同 bash shell的一種,也是現在大部分的linux的發行版本,shell就簡單理解成命令列直譯器...
解決SSH遠端執行命令找不到環境變數的問題
通過ssh執行遠端主機的命令或指令碼時,經常會出現找不到自定義環境變數的問題。但是,如果通過ssh登入遠端主機,然後再執行相同的命令或指令碼,那麼此時執行又是成功的。兩種相似的方法,得到的結果卻截然不同,看起來很詭異的現象,根本原因在於這兩種方式使用的bash模式不同!這種方式會使用bash的int...
解決SSH遠端執行命令找不到環境變數的問題
通過ssh執行遠端主機的命令或指令碼時,經常會出現找不到自定義環境變數的問題。但是,如果通過ssh登入遠端主機,然後再執行相同的命令或指令碼,那麼此時執行又是成功的。兩種相似的方法,得到的結果卻截然不同,看起來很詭異的現象,根本原因在於這兩種方式使用的bash模式不同!這種方式會使用bash的int...