micromamba快捷交互指令启动

存放

mkdir -p ~/.local/share/shell-utils

写入

cat << 'EOF' > ~/.local/share/shell-utils/micromamba-menu.sh
# 🚀 micromamba 交互式数字菜单 (支持 0 退出环境,回车跳过,兼容 Bash/Zsh)
me() {
    local current_shell="${SHELL##*/}"
    
    # 1. 获取所有环境名称
    local envs=()
    while IFS= read -r line; do
        [[ "$line" =~ ^[[:space:]]*$ || "$line" == *"Name"* ]] && continue
        local name=$(echo "$line" | awk '{print $1}')
        [[ -n "$name" ]] && envs+=("$name")
    done < <(micromamba env list)

    if [ ${#envs[@]} -eq 0 ]; then
        echo "❌ 没有找到任何 micromamba 环境"
        return 1
    fi

    # 2. 处理直接传入的数字参数 (例如: me 2 或 me 0)
    if [[ "$1" =~ ^[0-9]+$ ]]; then
        local idx=$((10#$1))
        
        # 🆕 输入 0 = 退出当前环境
        if [ "$idx" -eq 0 ]; then
            eval "$(micromamba shell hook --shell "$current_shell")"
            micromamba deactivate 2>/dev/null
            echo "🔙 已退出虚拟环境,回到系统原生环境"
            return 0
        fi
        
        # 正常激活逻辑 (自动兼容 Bash/Zsh 数组索引差异)
        local array_offset=0
        [[ "$current_shell" == "zsh" ]] && array_offset=1
        
        if (( idx >= 1 && idx <= ${#envs[@]} )); then
            eval "$(micromamba shell hook --shell "$current_shell")"
            micromamba activate "${envs[$((idx - 1 + array_offset))]}"
            echo "✅ 已激活: ${envs[$((idx - 1 + array_offset))]}"
        else
            echo "❌ 无效编号: $1 (有效范围: 0-${#envs[@]})"
            return 1
        fi
        return 0
    fi

    # 3. 无参数时,显示交互式菜单
    echo "📦 可用 micromamba 环境:"
    echo "─────────────────────────"
    printf "  \033[1;33m 0\033[0m) 🔙 退出环境 (回到系统原生)\n"
    for i in "${!envs[@]}"; do
        local display_idx=$((i + 1))
        [[ "$current_shell" == "zsh" ]] && display_idx=$i
        printf "  \033[1;36m%2d\033[0m) %s\n" "$display_idx" "${envs[$i]}"
    done
    echo "─────────────────────────"

    local choice
    read -rp "请输入编号 [0-${#envs[@]}] (直接回车跳过): " choice

    # 🆕 直接回车 = 不做任何操作
    if [ -z "$choice" ]; then
        echo "⏭️  已跳过,保持当前状态"
        return 0
    fi

    # 如果输入了其他数字,复用上面的参数处理逻辑
    if [[ "$choice" =~ ^[0-9]+$ ]]; then
        me "$choice"
    else
        echo "❌ 请输入数字"
        return 1
    fi
}
EOF

存放

# 检查是否已经添加过,避免重复添加
grep -qxF 'source ~/.local/share/shell-utils/micromamba-menu.sh' ~/.bashrc || echo -e '\n# 加载 micromamba 数字菜单快捷命令\nsource ~/.local/share/shell-utils/micromamba-menu.sh' >> ~/.bashrc

重启

source ~/.bashrc

使用

输入me启动菜单

posted on 2026-07-07 11:33  fmix  阅读(5)  评论(0)    收藏  举报

导航