【备份】自动列出虚拟环境供用户选择激活

【备份】自动列出虚拟环境供用户选择激活

需求

  1. 退出当前的虚拟环境(包括退出base)。
  2. 列出每个虚拟环境并添加一个编号显示。
  3. 等待用户输入,并激活该虚拟环境。如输入不在列表范围,则重新弹出提示,直到用户选择正确或按下Ctrl+c退出。

解决&实现

  • 在shell的启动脚本中添加一个函数实现
  • 编辑 .zshrc 或 .bashrc 文件并添加以下函数。留意两个shell中的read方法有区别,bash中用read -p,zsh中用read即可
act_conda_envs() {
    # 检测当前使用的 shell
    if [ -n "$ZSH_VERSION" ]; then
        # 使用 zsh 的读取方法
        read_input() {
            echo -n "Enter the number of the environment to activate (or press Ctrl+c to exit): "
            read choice
        }
    elif [ -n "$BASH_VERSION" ]; then
        # 使用 bash 的读取方法
        read_input() {
            read -p "Enter the number of the environment to activate (or press Ctrl+c to exit): " choice
        }
    else
        echo "Unsupported shell. This script works with zsh and bash."
        return 1
    fi

    # 1. 执行 conda deactivate 命令,直到退出 base 环境
    while [[ "$CONDA_DEFAULT_ENV" == "base" ]]; do
        conda deactivate
    done

    # 2. 列出 conda env list 的内容,并添加编号
    echo "Listing conda environments with numbers:"
    env_list=$(conda env list | grep -v '#' | awk '{print $1}' | grep -v '^$')

    i=1
    while IFS= read -r env; do
        echo "($i). $env"
        ((i++))
    done <<< "$env_list"

    # 3. 等待用户输入,并执行激活该虚拟环境的命令
    while true; do
        read_input

        if [[ "$choice" =~ ^[0-9]+$ ]] && (( choice >= 1 && choice <= i-1 )); then
            selected_env=$(echo "$env_list" | sed -n "${choice}p")
            echo "Activating environment: $selected_env"
            conda activate "$selected_env"
            break
        else
            echo "Invalid input. Please enter a number between 1 and $(($i-1))."
        fi
    done
}
  • 修改后执行source .bashrcsource .zshrc

结果

(base) think@xsyDL-4090solo:~$ act_conda_envs
Listing conda environments with numbers:
(1). base
(2). aidoc
(3). codegeex
(4). cogvlm2
(5). mem0ai
(6). sensevoice
(7). vllm
Enter the number of the environment to activate (or press Ctrl+c to exit): 5
Activating environment: mem0ai
(mem0ai) think@xsyDL-4090solo:~$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值