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機能するにはインターネット接続も必要なので、報告するのは不明だと思います。この場合、より明確に報告するには、スクリプトがインターネットに接続されていないことを確認する必要があります。

関連情報