macos shortcuts 无法直接运行 shell 脚本,需通过 automator 创建“快速操作”封装 shell 代码(如批量转 png),再导入 shortcuts;注意使用绝对路径、授权完整磁盘访问、显式声明 path 和错误处理。

在 macOS Shortcuts 中直接嵌入 Shell 脚本不可行,但可通过「导入 Automator 工作流」这一桥梁,把 Shell 脚本能力无缝接入快捷指令体系。关键不是硬塞代码,而是让 Shell 逻辑跑在 Automator 里,再被 Shortcuts 调用、触发、组合。
为什么不能在 Shortcuts 里直接写 Shell?
Shortcuts App 本身不提供“运行 Shell 脚本”操作模块。它的设计原则是图形化、无代码、面向用户任务——比如“重命名文件”“发送邮件”“打开网页”。底层系统级操作(如循环、条件判断、调用命令行工具)需依赖更底层的自动化框架,也就是 Automator。
正确路径:用 Automator 封装 Shell,再导入 Shortcuts
这是目前最稳定、兼容性最好、权限可控的方式:
- 打开 Automator → 新建“快速操作” → 设置“工作流程收到‘无输入’”“在‘任何应用’中”
- 左侧搜索“运行 Shell 脚本”,拖入右侧 → 选择 shell(推荐 /bin/zsh,macOS 默认)
- 在脚本框中粘贴你的 Shell 代码,例如:
for f in ~/Desktop/*.pdf; do sips -s format png "$f" --out "${f%.pdf}.png"; done - 勾选“在新窗口中运行”(可选,用于调试或保持终端可见)
- 保存为 .workflow 文件(如“批量转 PNG.workflow”)
- 打开 Shortcuts App → 空白处直接拖入该 .workflow 文件 → 自动转换为快捷指令
导入后能做什么?
转换后的快捷指令不再是“黑盒”,它继承了 Automator 的输入输出能力,并可与其他 Shortcuts 操作串联:
- 前一步“获取文件夹内容”的结果,可作为 Automator 工作流的输入(需在 Automator 中配置“工作流程收到‘文件’”)
- Shell 脚本执行后产生的临时文件、标准输出(stdout),可通过后续 Shortcuts 操作捕获,比如“显示结果”或“发送邮件”
- 支持绑定键盘快捷键、菜单栏图标、聚焦搜索调用,甚至加入自动化触发(如“新文件加入下载文件夹时运行”)
注意事项与避坑点
实际使用中几个关键细节容易出错:
-
路径要写绝对路径:Shell 中的 ~ 或 $HOME 在 Automator 环境下可能不展开,建议用
/Users/你的用户名/... - 权限问题:涉及系统修改(如写入 /usr/local)、访问受保护目录(如照片库)时,需提前在“系统设置 → 隐私与安全性 → 完整磁盘访问”中授权 Automator 和 Shortcuts
-
变量和环境差异:Automator 启动的 zsh 不加载 ~/.zshrc,所以自定义 alias、函数、PATH 扩展需在脚本开头显式声明,例如:
export PATH="/opt/homebrew/bin:$PATH" -
错误处理要主动加:Shell 脚本失败默认静默,建议用
set -e或检查 $?,配合echo "error: xxx" >&2输出到 stderr,便于 Shortcuts 捕获异常











