首页 > 解决方案 > 如何在 xonsh 提示符下有条件地使用 {env_name}

问题描述

xonshshell 中,我如何使用我正在使用的虚拟环境的名称作为定义中的条件$PROMPT

(更详细地说:我有一个调用'xonsh'xonsh shell 本身的虚拟环境,但我不希望这个 venv 显示在提示符中,但任何其他激活的 venv 都应该显示在提示符中。)

标签: pythonxonsh

解决方案


首先xonsh/prompt/env.py看看我们是如何定义env_name函数的——因为你使用 virtualenv,你可以在你的xonshrc:

import os.path

def env_name_cust(pre_chars="(", post_chars=")"):
    """Extract the current environment name from $VIRTUAL_ENV 
    """
    env_path = __xonsh__.env.get("VIRTUAL_ENV", "")
    env_name = os.path.basename(env_path)
    if env_name and env_name != 'xonsh':
        return pre_chars + env_name + post_chars

然后将该函数添加到$PROMPT_FIELDS字典中:

$PROMPT_FIELDS['env_name_cust'] = env_name_cust

然后您可以{env_name_cust}$PROMPT格式字符串中使用代替默认值{env_name}

如果您愿意,也可以${...}用作替代品。__xonsh__.env


推荐阅读