Ubuntu

sudo -E 在這裡如何工作?

  • January 9, 2015

我執行以下命令在 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還需要網際網路連接才能工作。在這種情況下,腳本應該檢查網際網路連接斷開或不更清楚地報告的天氣。

引用自:https://unix.stackexchange.com/questions/178303