當我用sudo使用任何命令時,環境變量不存在。例如,在設置HTTP_PROXY後,命令wget
正常工作,沒有sudo
。但是,如果我鍵入sudo wget
它說它不能繞過代理設置。如何在使用SUDO時保持環境變量
回答
的竅門是通過sudo visudo
命令的環境變量添加到sudoers
文件,並添加這些行:
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
對於Ubuntu的14,你需要在不同的行指定爲它返回的錯誤多變量行:
Defaults env_keep += "http_proxy"
Defaults env_keep += "https_proxy"
Defaults env_keep += "HTTP_PROXY"
Defaults env_keep += "HTTPS_PROXY"
這可以說是最好的選擇,可以避免信息泄露和安全漏洞。 'sudo -E'確實是一種一次性獲得相同效果的方式,儘管 – sehe 2011-12-26 14:55:51
我遇到了一個叫做sudo(jhbuild)的進程問題,我不能告訴它通過-E標誌爲sudo,所以這是我的解決方案。 – jgomo3 2013-05-13 12:23:26
請注意,您應該*永遠不要*直接編輯'etc/sudoers'。相反,在覆蓋'sudoers'文件之前,使用'visudo'命令,該命令會對語法進行編輯。這樣,如果編輯時出錯,您不會自行鎖定。 – Henning 2013-11-15 08:37:51
首先你需要export HTTP_PROXY
。其次,您需要仔細閱讀man sudo
,並注意-E
標誌。這工作:
$ export HTTP_PROXY=foof
$ sudo -E bash -c 'echo $HTTP_PROXY'
這裏是從該名男子頁報價:
-E, --preserve-env
Indicates to the security policy that the user wishes to reserve their
existing environment variables. The security policy may eturn an error
if the user does not have permission to preserve the environment.
偉大的唯一問題是修改一些配置文件,例如pacman for arch使-E通過 – 2011-12-26 09:01:51
允許-E (保留環境),您需要在允許運行wget的sudo規則中指定SETENV標記 - 示例:
此「-E」不會如果變量是PATH或PYTHONPATH,則不起作用。 – apporc 2016-06-27 06:23:48
您還可以在艾哈邁德Aswani的回答兩個env_keep
報表合併成一個單一的語句像這樣的:
Defaults env_keep += "http_proxy https_proxy"
你也應該考慮只有這樣一個命令指定env_keep
:
Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"
對於您希望在一次性基礎上提供的個別變量,您可以將它作爲命令的一部分。
sudo http_proxy=$http_proxy wget "http://stackoverflow.com"
我已經在''.bashrc'文件(帶有'export' clausule)的'PATH'中添加了一個myPath,測試了'package'的這個答案。然後'sudo PATH = $ PATH哪個軟件包找到了正確的答案,不像'sudo哪個軟件包'。然而,'sudo PATH = $ PATH package'不會比'sudo package'更進一步(找不到文件)。另一方面,從'sudo bash'調用的shell啓動一個普通的'package'保留了擴展路徑,並給出了'package' sudo權限(兩個鴿子一石二鳥)。所以反應真的取決於你啓動的命令 – XavierStuvw 2017-01-05 18:16:34
sudo的PATH解決方案是另一回事 - 任何人都應該找到這篇文章來尋找這個問題,我建議你看看http://unix.stackexchange.com/questions/83191/how-to - 製作 - 須藤-保存路徑 – jpj 2017-01-06 09:16:55
- 1. 如何使我的環境變量可用於sudo命令?
- 2. 保留sudo的環境
- 3. sudo環境變量如何在linux中工作?
- 4. 在使用環境變量
- 5. 我如何sudo環境?
- 6. 如何在環境變量
- 7. Linux - 保護環境變量
- 8. 保存環境變量
- 9. 如何使用Xcode Bot環境變量?
- 10. 如何使用JAVA_OPTS環境變量?
- 11. 如何使用GitVersion環境變量
- 12. 如何使用PGPASSFILE環境變量?
- 13. 使用perl執行shell命令,同時保持shell環境變量
- 14. 當使用sudo linux時,環境變量之間的差異會被加載
- 15. 使用環境變量時DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
- 16. 使用環境變量%ALLUSERSPROFILE%
- 17. 使用環境變量
- 18. nginx:使用環境變量
- 19. 使用環境變量
- 20. 使用Mex環境時設置環境變量
- 21. 在Solaris上持久保留環境變量
- 22. 如何在sequalizejs LINUX環境下批量創建時如何保持順序?
- 23. 在Java中保留環境變量
- 24. 爲其他用戶設置Linux環境變量(sudo)
- 25. 如何使用變量名中含有點的環境變量?
- 26. 如何通過使用環境變量設置AWS變量
- 27. 如何使用sudo獲取XDG變量?
- 28. 如何在Windows上持久定義Java環境變量?
- 29. 如何在applescript中使用函數時保持變量類型
- 30. 在csproj中使用appdata環境變量
http://superuser.com/questions/232231/how-do-i-make-sudo-preserve-my-environment-variables – 2015-12-08 16:51:41
相關:[爲什麼要通過sudo和蘇中運行時是PATH變量不同?](http://unix.stackexchange.com/q/8646/21471)在Unix SE – kenorb 2015-12-24 18:30:23