解決sudo使用者找不到環境變數的問題

2022-06-11 16:24:10 字數 2250 閱讀 2557

出於安全方面的考慮,使用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...