mise 是 Rust 编写的一个工具,功能全面,支持版本管理和任务。
配置文件
Windows 推荐在 Github Release 中下载,然后手动添加到环境变量中,后续更新使用命令即可。shell 推荐使用 Git Bash
2026.4.23 补充,mise 2026.4.4 版本后在 git bash 中无法使用不全,tasks 也受到了干扰。主要是 Windows 的路径问题,官方解决很慢,看了 github issues 基本没几个人使用。如果使用 Windows 系统还是老老实实用 PS 吧,浪子已转 WSL
mise 的默认配置文件位于 ~/.config/mise/mise.toml,若没有既可以手动创建,也可以使用 mise 交互式命令创建:mise edit。
[env]
# mise 安装插件和工具的目录
MISE_DATA_DIR = "D:/xxx/develop/data"
# mise 内部缓存目录
MISE_CACHE_DIR = "D:/xxx/develop/cache"
# mise 临时路径,主要存储 install 时的文件
MISE_TMP_DIR = "D:/xxx/develop/tmp"
配置文件编辑完成之后,可以使用 mise doctor 查看是否生效。
如果你需要更多的配置,例如开发和测试环境区分开以及其它更多的需求,可以参考 官方文档。
命令
# 查看帮助
mise -h
# 查看本地安装列表
mise ls
# 更新 mise
mise self-update
# 查看 mise 读取的配置
mise config
# 查看 mise 支持的开发工具
mise registry
# 查询工具可用版本
mise ls-remote <tool-name>
# 安装指定版本工具
mise install <tool-name>@<tool-version>
# 直接安装到指定目录
mise install-into <tool-name>@<tool-version> <path>
# 查看过期的工具
mise outdated
# 设置别名,主要是版本别名
# 例如 mise tool-alias set java 17 temurin-17.0.18+8
# 使用时 mise u java@17
mise tool-alias set <tool-name> <alias-version> <tool-version>
# 取消别名
mise tool-alias unset <tool-name> <alias-version>
# 查看所有别名
mise tool-alias ls
# 查看指定工具别名
mise tool-alias ls [tool-name]
# 查看工具安装的目录,只对全局设置的工具生效
mise where <tool-name>
# 查看任务列表
mise tasks
自动补全
mise 的 completion 必须使用 usage,否则不会生效。下文以 Git Bash 说明。 毕竟浪子使用的都是 Git Bash 如果你使用其它的 shell,请自行查阅 官方文档。
首先编辑 ~/.bashrc 添加以下内容:
if [ -d /etc/bash_completion ]; then
for file in /etc/bash_completion/*; do
[ -f "$file" ] && . "$file"
done
fi
# 安装 usage
mise use -g usage
mkdir -p /etc/bash_completion
# 设置脚本
mise completion bash --include-bash-completion-lib > /etc/bash_completion/mise
然后重新打开你的 terminal。
要使上面的内容生效,需满足以下条件:
- 本机安装 Git 且使用 Git Bash。
/etc/bash_completion目录即 Git 安装目录下的/etc路径- usage 必须安装,且需要手动将其目录添加到环境变量中
mise 任务脚本
mise 支持运行任务脚本,这些脚本只需要放入 ~/.config/mise/tasks 目录中即可。另外,只要你的机器上有对应的运行环境,理论上 mise 支持多种类型的脚本,例如 python、deno、node、powershell 等等。
我们经常向服务器添加 ssh key,那么就可以写一个简单的脚本 add-ssh-key.sh,后面就可以用 mise 运行这个小脚本快速添加啦~
#!/usr/bin/env bash
set -e
# PUB_KEY 文件
PUB_KEY_FILE="$HOME/.ssh/server/server_key.pub"
# config 文件
CONFIG_FILE="$HOME/.ssh/config"
RED='\e[31m'
GREEN='\e[32m'
YELLOW='\e[33m'
RESET='\e[0m'
[ -f "$CONFIG_FILE" ] || touch "$CONFIG_FILE"
if [ $# -ne 0 ]; then
hostname="$1"
else
read -p "请输入 SSH HOST: " -r hostname
read -p "是否设置别名?[y/n], default n: " -r aliaflag
aliaflag=${aliaflag:-n}
if [ "$aliaflag" == "y" ]; then
read -p "请输入别名: " alianame
fi
fi
h1=$(echo "$hostname" | cut -d '.' -f 3)
h2=$(echo "$hostname" | cut -d '.' -f 4)
if [ -z "$alianame" ]; then
alianame="$h1.$h2"
fi
if grep -q "Host $alianame" "$CONFIG_FILE"; then
alianame="$hostname"
fi
# 先检测 ip 或域名,再检测别名
if grep -q "Hostname $hostname" "$CONFIG_FILE"; then
echo -ne "${YELLOW}[warn]${RESET} 已存在相同的 HOST, 是否重新向此服务器添加 SSH KEY?[y/n], default y: "
read retry
retry=${retry:-y}
[ "$retry" == "n" ] && exit 0
elif grep -q "Host $alianame" "$CONFIG_FILE"; then
echo -e "${YELLOW}[warn]${RESET} 已存在相同的别名,程序退出,请重新执行脚本"
exit 1
else
{
echo ""
echo "Host $alianame"
echo " Hostname $hostname"
echo " User root"
echo " Port 22"
echo " PreferredAuthentications publickey"
echo " IdentityFile ~/.ssh/server/server_key"
echo " IdentitiesOnly yes"
} >> "$CONFIG_FILE"
fi
ssh-copy-id -i "$PUB_KEY_FILE" root@"$hostname"
echo -e "${GREEN}Success! 请使用 ssh root@$alianame 登录服务器 ${RESET}"
然后就可以在任何位置执行 mise run add-ssh-key 来运行这个脚本。使用时我们并不需要 cd 到脚本所在的目录,而且还可以享受 mise 的自动补全功能☺,是不是方便了很多呢~
mise 支持给脚本分组,只需要在 ~/.config/mise/tasks 目录下创建一个子目录,将脚本放入其中即可。假如上面的脚本位置在 ~/.config/mise/tasks/ssh/add-key.sh 中,可以这样调用:mise run ssh:add-key。
可以利用 mise task 完成很多有趣的小功能!例如,如果你使用 rime,那么可以考虑写一个小脚本同步上游仓库更新的字典文件到本地,然后重新部署即可食用。
任务脚本中获取当前的工作路径
mise 中有两种方式获取当前 shell 的工作路径(默认情况下打印的是 task 脚本所在路径):
-
通过 mise 的环境变量直接获取(该变量只能在 mise task 脚本中使用)
#!/usr/bin/env bash echo "$MISE_ORIGINAL_CWD" -
特殊的脚本设置,脚本中声明
dir="{{cwd}}"#!/usr/bin/env bash # https://mise.jdx.dev/tasks/file-tasks.html#cwd #MISE dir="{{cwd}}" echo "$(pwd)"
这个功能对开发者来说很有帮助,可以做很多有用的事情~
附
如果你也在 Windows 上使用 Git Bash,那么使用 mise 时可能也需要看一看这个:https://github.com/jdx/mise/discussions/3961

说些什么吧!