README_ZH.md
August 26, 2025 · View on GitHub
✨ 什么是 SwitchShuttle?
SwitchShuttle 是一个强大的跨平台系统托盘应用程序,它彻底改变了您管理和执行终端命令的方式。使用现代技术(Rust + Tauri + Vue.js)构建,它提供了一个优雅的界面来组织、自定义和快速访问您最常用的终端操作。
🎯 主要功能
- 🖥️ 多平台支持 - 在 macOS、Windows 和 Linux 上无缝运行
- ⚡ 全局热键 - 使用键盘快捷键从任何地方立即执行命令
- 🎨 多终端支持 - iTerm、Terminal、Warp、Alacritty、Hyper 等
- 📁 智能组织 - 创建嵌套子菜单以更好地组织命令
- 🔧 动态输入 - 需要用户输入的命令的交互式提示
- 🔄 多种执行模式 - 在当前窗口、新标签页或新窗口中执行
- 🚀 自动启动 - 系统启动时启动以立即访问
- 🎨 现代界面 - 使用 Vue.js 构建的美丽直观界面
- 💻 命令行界面 - 直接从终端执行命令的 CLI
- ⚙️ 配置管理 - 启用/禁用配置而无需删除
- 🔄 开关命令 - 通过后台执行切换系统功能
- 📊 监控命令 - 实时系统资源监控,带视觉指示器
- 📅 计划命令 - 使用 cron 表达式自动化任务
- 🎯 模板系统 - 常见工作流程的预构建命令模板
🖥️ 用户界面概述
SwitchShuttle 提供了一个现代、直观的界面,具有几个关键组件:
🎛️ 主要界面组件
1. 配置编辑器
- 可视化 JSON 编辑器 - 使用语法高亮和验证编辑配置
- 模板系统 - 导入常见工作流程的预构建命令模板
- 实时验证 - 配置错误的即时反馈
- 自动保存 - 输入时自动保存更改
- 配置管理 - 启用/禁用配置而无需删除
- 搜索和过滤 - 快速找到特定配置
- 配置复制 - 为测试创建现有配置的副本
2. 命令管理
- 命令构建器 - 使用可视化表单界面创建命令
- 热键配置 - 设置即时命令执行的全局快捷键
- 图标选择器 - 选择表情符号图标以更好地视觉组织
- 输入字段 - 为交互式命令配置动态输入提示
- 嵌套子菜单 - 在层次结构中组织命令
- 命令验证 - 命令语法的实时验证
3. 设置面板
- 终端选择 - 选择您首选的终端应用程序
- 启动模式 - 配置命令执行方式(当前/新标签页/新窗口)
- 主题设置 - 自定义应用程序外观
- 自动启动配置 - 启用/禁用系统启动
- 全局热键设置 - 配置系统范围的菜单快捷键
4. 系统托盘菜单
- 快速访问 - 右键点击托盘图标以立即访问命令
- 状态指示器 - 开关命令和监控的视觉反馈
- 嵌套菜单 - 易于导航的有组织命令层次结构
- 全局热键 - 即时命令执行的键盘快捷键
- 实时监控 - 实时系统资源指示器
🎨 界面功能
可视化命令构建器
{
"name": "🚀 启动开发服务器",
"command": "npm run dev",
"hotkey": "Ctrl+Shift+D",
"icon": "🚀",
"background": false,
"inputs": {
"port": "3000",
"host": "localhost"
}
}
模板系统
SwitchShuttle 包含常见开发工作流程的预构建模板:
- 开发 - Git 操作、构建工具、测试
- DevOps - Docker、Kubernetes、服务器管理
- 数据库 - MySQL、PostgreSQL、MongoDB 操作
- 云服务 - AWS、Azure、Google Cloud 命令
- 安全 - 网络扫描、漏洞评估
- 监控 - 系统资源、日志、指标
- 实用工具 - 文件操作、系统工具
- 调度器 - Cron 作业和自动化任务
智能组织
- 嵌套子菜单 - 在逻辑组中组织命令
- 图标支持 - 使用表情符号图标进行视觉识别
- 热键管理 - 即时访问的全局快捷键
- 状态指示器 - 开关命令的实时反馈
- 搜索功能 - 快速命令发现
🔒 安全管理器
SwitchShuttle包含一个全面的安全管理器,可以保护您的系统免受潜在有害命令的影响,并提供对命令执行的精细控制。
🛡️ 安全功能
命令验证
- 长度限制: 最大命令长度(1000字符)和输入长度(500字符)防止过长的命令
- 阻止的命令: 定义永远不应该执行的危险命令列表
- 可疑模式: 使用正则表达式模式来检测和阻止潜在有害的命令模式
- 实时验证: 命令在编辑时进行验证以确保安全
安全设置
- 启用/禁用安全: 根据需要切换安全功能
- 自定义阻止列表: 向阻止的命令列表添加特定命令
- 模式匹配: 定义正则表达式模式来捕获可疑的命令结构
- 长度限制: 配置命令和用户输入的最大长度
工作原理
- 编辑器验证: SecurityManager在配置编辑器中保存前验证命令
- 模式匹配: 命令根据阻止的模式和可疑的正则表达式模式进行检查
- 长度验证: 命令和输入根据最大长度限制进行验证
- 阻止列表检查: 命令与用户定义的阻止命令列表进行比较
- 安全配置: 只允许保存和使用经过验证的配置
🚀 快速开始
下载和安装
选项 1: Homebrew (macOS - 推荐)
# 通过 Homebrew 安装
brew tap s00d/switchshuttle
brew install --cask switchshuttle
选项 2: 手动下载
- 下载 从 GitHub Releases 下载您平台的最新版本
- 安装 应用程序
- 启动 SwitchShuttle - 它将出现在系统托盘中
- 右键点击 托盘图标访问菜单
首次配置
- 打开配置编辑器 - 点击系统托盘菜单中的"编辑配置"
- 选择终端 - 选择您首选的终端应用程序
- 添加命令 - 使用可视化编辑器或导入模板
- 设置热键 - 配置快速访问的全局快捷键
- 保存并重启 - 您的命令现在在托盘菜单中可用
界面逐步指南
步骤 1: 配置编辑器
- 打开 SwitchShuttle 并导航到"编辑器"选项卡
- 选择您的终端应用程序(iTerm、Terminal、Warp 等)
- 设置启动模式(当前窗口、新标签页或新窗口)
- 配置菜单访问的全局热键
步骤 2: 添加命令
- 点击"添加命令"创建新命令
- 填写命令详情:
- 名称: 命令的显示名称
- 命令: 要执行的实际终端命令
- 热键: 全局快捷键(可选)
- 图标: 视觉识别的表情符号图标
- 后台: 是否在后台运行
- 输入: 交互式命令的动态输入字段
步骤 3: 使用模板
- 点击"导入模板"访问预构建的命令集合
- 浏览开发、DevOps、数据库等类别
- 选择并导入您需要的模板
- 根据需要自定义导入的命令
步骤 4: 系统托盘访问
- 右键点击 SwitchShuttle 托盘图标
- 浏览您有组织的命令菜单
- 使用全局热键进行即时命令执行
- 使用实时指示器监控系统状态
步骤 5: 高级功能
- 开关命令: 带视觉状态指示器的系统功能切换
- 监控命令: 系统资源的实时监控
- 计划命令: 使用 cron 表达式自动化任务
- 嵌套菜单: 层次结构中的命令组织
💻 命令行界面 (CLI)
SwitchShuttle 还提供了一个强大的命令行界面,用于无需打开 GUI 的快速命令执行。
CLI 使用
执行命令
# 通过命令 ID 执行
switch-shuttle cmd_8
# 通过命令名称执行(不区分大小写)
switch-shuttle "示例命令"
列出所有命令
# 显示所有可用命令及其 ID
switch-shuttle --list
# 或
switch-shuttle -l
搜索命令
# 搜索包含特定文本的命令
switch-shuttle --search "git"
# 或
switch-shuttle -s "docker"
在不同操作系统上运行 CLI
macOS
# 如果通过 Homebrew 安装
switch-shuttle --list
# 如果手动安装
/Applications/switch-shuttle.app/Contents/MacOS/SwitchShuttle --list
# 创建别名以便更容易访问
echo 'alias switch-shuttle="/Applications/switch-shuttle.app/Contents/MacOS/SwitchShuttle"' >> ~/.zshrc
source ~/.zshrc
Windows
# 如果通过安装程序安装
"C:\Program Files\SwitchShuttle\switch-shuttle.exe" --list
# 如果通过 winget 或 chocolatey 安装
switch-shuttle --list
# 添加到 PATH 以便更容易访问
# 将 "C:\Program Files\SwitchShuttle" 添加到系统 PATH
Linux
# 如果通过包管理器安装
switch-shuttle --list
# 如果手动安装
./switch-shuttle --list
# 使其可执行并添加到 PATH
chmod +x switch-shuttle
sudo mv switch-shuttle /usr/local/bin/
CLI 示例
# 快速 Git 操作
switch-shuttle "git status"
switch-shuttle "git pull"
# 开发工作流程
switch-shuttle "npm run dev"
switch-shuttle "docker-compose up"
# 列出所有可用命令
switch-shuttle --list
# 查找与数据库相关的命令
switch-shuttle --search "database"
CLI 功能
- 🚀 快速执行 - 从终端立即执行命令
- 🔍 智能搜索 - 通过 ID 或名称查找命令
- 📋 命令列表 - 查看所有可用命令
- ⚡ 无需 GUI - 完美用于自动化和脚本
- 🔄 执行后退出 - 干净的终端体验
📋 配置指南
基本结构
SwitchShuttle 使用 JSON 配置文件,存储在:
- macOS/Linux:
~/.config/switch-shuttle/ - Windows:
C:\Users\<用户名>\AppData\Roaming\switch-shuttle\
简单示例
{
"terminal": "iterm",
"launch_in": "new_tab",
"title": "我的命令",
"commands": [
{
"name": "🚀 启动开发服务器",
"command": "npm run dev",
"hotkey": "Ctrl+Shift+D"
},
{
"name": "📦 安装依赖",
"command": "npm install",
"hotkey": "Ctrl+Shift+I"
},
{
"name": "🔧 开发工具",
"submenu": [
{
"name": "🧪 运行测试",
"command": "npm test",
"hotkey": "Ctrl+Shift+T"
},
{
"name": "📊 构建项目",
"command": "npm run build",
"hotkey": "Ctrl+Shift+B"
}
]
}
]
}
高级功能
🔧 动态输入
创建需要用户输入的交互式命令:
{
"name": "📝 创建新组件",
"inputs": {
"componentName": "MyComponent",
"componentType": "functional"
},
"commands": [
"mkdir -p src/components/[componentName]",
"touch src/components/[componentName]/index.tsx",
"echo 'import React from \"react\";' > src/components/[componentName]/index.tsx",
"echo 'export const [componentName] = () => <div>[componentName]</div>;' >> src/components/[componentName]/index.tsx"
],
"hotkey": "Ctrl+Shift+N"
}
🔄 多命令
执行命令序列:
{
"name": "🔄 完整开发周期",
"commands": [
"git pull origin main",
"npm install",
"npm run lint",
"npm run test",
"npm run build"
],
"background": true,
"hotkey": "Ctrl+Shift+F"
}
⏰ 计划命令 (Cron)
使用 cron 表达式安排命令自动执行:
{
"name": "🔄 自动备份",
"commands": [
"rsync -av /source/ /backup/"
],
"scheduler": "0 2 * * *",
"background": true,
"hotkey": "Ctrl+Shift+B"
}
Cron 表达式格式:
调度器使用标准的 6 字段 cron 表达式:秒 分 时 日 月 星期
常见 Cron 示例:
"0 0 * * * *"- 每小时整点"0 0 2 * * *"- 每天凌晨 2 点"0 30 9 * * 1-5"- 工作日上午 9:30"0 0 12 * * 1"- 每周一中午"0 0 0 1 * *"- 每月 1 号"0 */15 * * * *"- 每 15 分钟"0 0 0 * * 0"- 每周日午夜
调度器功能:
- 后台执行 - 命令静默运行,不打开终端
- Cron 支持 - 完整的 cron 表达式解析和执行
- 错误处理 - cron 解析失败时的优雅回退
- 跨平台 - 在 macOS、Windows 和 Linux 上工作
🖥️ 后台执行
控制命令执行方式 - 使用 ConsolePool 在后台或正常终端执行:
{
"name": "🚀 启动服务器",
"commands": [
"npm run dev"
],
"background": true,
"hotkey": "Ctrl+Shift+S"
}
后台执行选项:
"background": true- 使用 ConsolePool 执行(后台)"background": false- 使用正常终端执行"background": null或省略 - 基于命令类型自动检测
📁 嵌套子菜单
在层次菜单中组织命令:
{
"name": "🐳 Docker 操作",
"submenu": [
{
"name": "🚀 启动服务",
"submenu": [
{
"name": "🏗️ 开发",
"command": "docker-compose -f docker-compose.dev.yml up -d"
},
{
"name": "🏭 生产",
"command": "docker-compose -f docker-compose.prod.yml up -d"
}
]
},
{
"name": "🛑 停止所有",
"command": "docker-compose down"
}
]
}
🔄 开关命令
通过后台执行切换系统功能:
{
"name": "🔧 系统控制",
"submenu": [
{
"name": "📶 切换 WiFi",
"command": "networksetup -setairportpower en0 toggle",
"switch": "networksetup -getairportpower en0 | grep -q 'On' && echo 'true' || echo 'false'"
},
{
"name": "🔊 切换蓝牙",
"command": "blueutil -p toggle",
"switch": "blueutil -p | grep -q '1' && echo 'true' || echo 'false'"
},
{
"name": "🌙 切换深色模式",
"command": "osascript -e 'tell app \"System Events\" to tell appearance preferences to set dark mode to not dark mode'",
"switch": "osascript -e 'tell app \"System Events\" to tell appearance preferences to get dark mode'"
}
]
}
开关命令功能:
- 后台执行 - 命令静默运行,不打开终端
- 状态检查 - 自动检测当前状态
- 视觉反馈 - 在菜单中显示启用/禁用状态
- 跨平台 - 在 macOS、Windows 和 Linux 上工作
📊 监控命令
使用实时信息监控系统资源和服务:
{
"name": "📊 系统监控",
"submenu": [
{
"name": "💾 内存使用",
"command": "top -l 1 | head -n 10",
"monitor": "memory",
"icon": "🧠"
},
{
"name": "💻 CPU 负载",
"command": "top -l 1 | grep 'CPU usage'",
"monitor": "cpu",
"icon": "⚡"
},
{
"name": "💾 磁盘空间",
"command": "df -h | grep '/dev/'",
"monitor": "disk",
"icon": "💾"
},
{
"name": "🌐 网络状态",
"command": "ifconfig | grep -E 'inet |status:'",
"monitor": "network",
"icon": "🌐"
}
]
}
监控命令功能:
- 菜单集成 - 向系统托盘菜单添加监控按钮
- 命令执行 - 菜单打开时执行监控命令
- 数据显示 - 直接在菜单界面中显示命令输出
- 视觉指示器 - 菜单中的图标和状态指示器
- 跨平台 - 在 macOS、Windows 和 Linux 上工作
⚙️ 配置参考
主配置
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
terminal | String | 要使用的终端应用程序 | "terminal" |
launch_in | String | 启动命令的位置 | "current" |
theme | String | 终端主题(如果支持) | - |
title | String | 窗口/标签页标题 | - |
menu_hotkey | String | 打开菜单的全局热键 | - |
commands | Array | 命令配置列表 | [] |
enabled | Boolean | 是否应加载此配置 | true |
终端选项
| 终端 | macOS | Windows | Linux |
|---|---|---|---|
iterm | ✅ | ❌ | ❌ |
terminal | ✅ | ✅ | ✅ |
warp | ✅ | ❌ | ❌ |
alacritty | ✅ | ✅ | ✅ |
hyper | ✅ | ✅ | ✅ |
启动模式
| 模式 | 描述 |
|---|---|
current | 在当前终端窗口中执行 |
new_tab | 打开新标签页并执行 |
new_window | 打开新窗口并执行 |
命令配置
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
name | String | ✅ | 命令的显示名称 |
commands | Array | ❌ | 要执行的多个命令 |
submenu | Array | ❌ | 嵌套子命令 |
switch | String | ❌ | 检查开关状态的命令(返回 true/false) |
monitor | String | ❌ | 获取监控显示值的命令 |
inputs | Object | ❌ | 动态输入字段 |
hotkey | String | ❌ | 全局热键快捷键 |
icon | String | ❌ | 视觉识别的表情符号图标 |
background | Boolean | ❌ | 在后台执行(ConsolePool)或正常终端 |
scheduler | String | ❌ | 计划执行的 cron 表达式 |
配置管理
启用/禁用配置
您可以启用或禁用单个配置文件来控制系统托盘菜单中可用的命令。这对于以下情况很有用:
- 临时禁用 - 禁用配置而不删除
- 测试 - 开发期间启用/禁用配置
- 组织 - 保持多个配置但仅使用特定配置
在可视化编辑器中:
- 打开配置编辑器
- 使用"配置状态"部分中的切换开关
- 启用的配置将被加载并在菜单中可用
- 禁用的配置将被忽略
在 JSON 配置中:
{
"terminal": "iterm",
"launch_in": "current",
"title": "我的命令",
"enabled": true,
"commands": [
{
"name": "示例命令",
"command": "echo Hello World"
}
]
}
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabled | Boolean | true | 是否应加载此配置并在菜单中可用 |
注意: 当 enabled 设置为 false 或省略时,配置将被忽略,其命令不会出现在系统托盘菜单中。
🎯 使用案例
👨💻 开发者
- 快速项目导航 - 立即跳转到不同项目
- 构建和测试工作流程 - 一键开发周期
- Docker 管理 - 使用热键启动/停止容器
- Git 操作 - 手边的常用 git 命令
- 开发服务器管理 - 启动/停止开发服务器
- 代码质量工具 - 运行 linter、formatter 和测试
🛠️ DevOps 工程师
- 服务器管理 - SSH 连接和服务器命令
- 监控工具 - 快速访问日志和指标
- 部署脚本 - 自动化部署工作流程
- 数据库操作 - 常用数据库命令
- 容器编排 - Docker 和 Kubernetes 管理
- 基础设施监控 - 系统资源跟踪
🎨 设计师
- 资源优化 - 图像处理和优化
- 设计系统工具 - 组件生成和更新
- 原型服务器 - 快速设计服务器启动
- 设计工具自动化 - 批处理和工作流程
🔧 系统管理员
- 系统监控 - 实时资源监控
- 服务管理 - 启动/停止系统服务
- 备份自动化 - 计划备份操作
- 网络工具 - 网络诊断和配置
- 安全工具 - 漏洞扫描和评估
- 维护任务 - 系统清理和优化
🔧 从源代码构建
先决条件
构建步骤
# 克隆仓库
git clone https://github.com/s00d/switchshuttle.git
cd switchshuttle
# 安装依赖
pnpm install
# 开发模式
pnpm run tauri dev
# 生产构建
pnpm run tauri build
平台特定说明
macOS
# 如果遇到签名问题
chmod +x /Applications/switch-shuttle.app
xattr -cr /Applications/switch-shuttle.app
codesign --force --deep --sign - /Applications/switch-shuttle.app
Windows
# 安装 Rust 和 Node.js
# 然后按照上面的构建步骤
Linux
# 安装系统依赖
sudo apt-get update
sudo apt-get install libwebkit2gtk-4.0-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
# 然后按照上面的构建步骤
🤝 贡献
我们欢迎贡献!以下是您可以提供帮助的方式:
- Fork 仓库
- 创建 功能分支 (
git checkout -b feature/amazing-feature) - 提交 您的更改 (
git commit -m 'Add amazing feature') - 推送 到分支 (
git push origin feature/amazing-feature) - 打开 Pull Request
开发指南
- 遵循现有代码风格
- 为新功能添加测试
- 根据需要更新文档
- 确保跨平台兼容性
- 使用 pnpm 进行包管理
开发设置
# 安装依赖
pnpm install
# 启动开发服务器
pnpm run tauri dev
# 运行类型检查
pnpm run type-check
# 生产构建
pnpm run tauri build
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
🙏 致谢
- 受原始 Shuttle 项目启发
- 使用 Tauri 构建跨平台桌面应用
- UI powered by Vue.js
- 使用 Tailwind CSS 样式化
📞 支持
- Issues: GitHub Issues
- Releases: GitHub Releases
- Documentation: GitHub Wiki
由 SwitchShuttle 社区用 ❤️ 制作
⭐ 如果您觉得这个仓库有用,请给它一个星标!