sudo -E는 여기서 어떻게 작동합니까?

sudo -E는 여기서 어떻게 작동합니까?

Ubuntu에 ppa 저장소를 추가하기 위해 다음 명령을 실행했습니다.

sudo add-apt-repository ppa:ppaname/ppa

이 명령은 ppa 이름이 올바른 형식이 아니라는 오류를 반환합니다. 그러다가 보니여기따라서 다음 명령을 실행하십시오.

sudo -E add-apt-repository ppa:ppaname/ppa

위의 명령은 마술처럼 작동합니다. 그런 다음 매뉴얼 페이지를 읽었으며 환경 변수를 보존하라는 sudo내용이 나와 있습니다 . sudo -E내가 이해하지 못하는 것은 환경 변수를 유지하는 것이 나에게 어떻게 도움이 되는지입니다.

참고: 저는 프록시 뒤에서 작업합니다.

답변1

인터넷 연결에 프록시를 사용하는 경우 시스템에 사용자가 프록시 서버 IP를 설정할 수 있도록 일부 환경 변수가 설정되어 있을 수 있습니다. 옵션 없이 sudo를 사용하면 -E환경 변수가 유지되지 않아 인터넷에 연결할 수 없어 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작동하려면 인터넷 연결도 필요하기 때문에 보고하는 것이 불분명하다고 생각합니다 . 이 경우 보다 명확하게 보고하려면 스크립트에서 인터넷 연결이 끊어졌는지 확인해야 합니다.

관련 정보