Ubuntu
sudo -E 在這裡如何工作?
我執行以下命令在 Ubuntu 中添加 ppa 儲存庫:
sudo add-apt-repository ppa:ppaname/ppa
此命令返回 ppa 名稱格式不正確的錯誤。然後我看這裡,因此執行了以下命令:
sudo -E add-apt-repository ppa:ppaname/ppa
上面的命令就像魔術一樣工作。然後我閱讀了手冊頁,
sudo
其中說sudo -E
保留了環境變數。我不明白的是,保留環境變數對我有什麼幫助?注意:我在代理後面工作。
如果您使用代理進行網際網路連接,可能您的系統為您的使用者設置了一些環境變數來設置代理伺服器 IP。當您不帶
-E
選項使用 sudo 時,您的環境變數不會被保留,因此您無法連接到網際網路,從而導致add-apt-repository
顯示該錯誤。查看add-apt-repository
原始碼,可以看到:try: ppa_info = get_ppa_info_from_lp(user, ppa_name) except HTTPError: print _("Cannot add PPA: '%s'.") % line if user.startswith("~"): print _("Did you mean 'ppa:%s/%s' ?" %(user[1:], ppa_name)) sys.exit(1) # Exit because the user cannot be correct # If the PPA does not exist, then try to find if the user/team # exists. If it exists, list down the PPAs _maybe_suggest_ppa_name_based_on_user(user) sys.exit(1)
所以如果你不能連接到網際網路,
_maybe_suggest_ppa_name_based_on_user()
就會被呼叫。這是它的實現:def _maybe_suggest_ppa_name_based_on_user(user): try: from launchpadlib.launchpad import Launchpad lp = Launchpad.login_anonymously(lp_application_name, "production") try: user_inst = lp.people[user] entity_name = "team" if user_inst.is_team else "user" if len(user_inst.ppas) > 0: print _("The %s named '%s' has no PPA named '%s'" %(entity_name, user, ppa_name)) print _("Please choose from the following available PPAs:") for ppa in user_inst.ppas: print _(" * '%s': %s" %(ppa.name, ppa.displayname)) else: print _("The %s named '%s' does not have any PPA" %(entity_name, user)) except KeyError: pass except ImportError: print _("Please check that the PPA name or format is correct.")
Please check that the PPA name or format is correct
您可以看到,如果無法導入,它將顯示消息Launchpad
。您需要安裝python-launchpadlib才能使導入成功。筆記
我認為報告該消息是模棱兩可的,因為什麼時候
launchpadlib
還需要網際網路連接才能工作。在這種情況下,腳本應該檢查網際網路連接斷開或不更清楚地報告的天氣。