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启动菜单
浙公网安备 33010602011771号