mise 是 Rust 编写的一个工具,功能全面。vfox 轻量简单,易于使用,选择合适的就行。mise 也支持 vfox 作为后端(从 vfox 源中安装软件)。
配置文件
Windows 推荐在 Github Release 中下载,然后手动添加到环境变量中,后续更新使用命令即可。shell 推荐使用 Git Bash。
mise 的默认配置文件位于 ~/.config/mise/mise.toml,若没有既可以手动创建,也可以使用 mise 命令创建:mise edit,这将打开 mise 的交互式 bash 环境。
[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 查看是否生效。
如果你需要更多的配置,例如开发和测试环境区分开以及其它更多的需求,可以参考官方文档:https://mise.jdx.dev/configuration.html
命令
# 查看帮助
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 alias set <tool-name> <alias-name> <tool-version>
# 取消别名
mise alias unset <tool-name> <alias-name>
# 查看别名
mise alias ls [tool-name]
# 查看工具安装的目录,只对全局设置的工具生效
mise where <tool-name>
# 查看任务列表
mise tasks
更多命令或命令简写参见官方文档:https://mise.jdx.dev/walkthrough.html#common-commands
自动补全
mise 的 completion 必须使用 usage,否则不会生效,使用时非常好用,options 也会有提示。下文以 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 的自动补全功能☺,是不是方便了很多呢~
如果需要给脚本分组,只需要在 ~/.config/mise/tasks 目录下创建一个子目录,将脚本放入其中即可。假如上面的脚本位置在 ~/.config/mise/tasks/ssh/add-key.sh 中,可以这样调用:mise run ssh:add-key。
可以利用 mise task 完成很多有趣的小功能!例如,如果你使用 rime,那么可以考虑写一个小脚本同步上游仓库更新的字典文件到本地,然后重新部署即可食用。
任务脚本中获取当前的工作路径
mise 中有两种方式获取当前 shell 的工作路径(默认情况下打印的是 task 脚本所在路径):
-
通过 mise 的环境变量直接获取(直接在 shell 中打印
$MISE_ORIGINAL_CWD是不行的,该变量只能在 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

说些什么吧!