用默认或指定应用打开文件、目录和 URL,等价于在 Finder 中双击。
open 通过 Launch Services 找到文件的默认应用,然后把文件或 URL 交给它。open . 在 Finder 中打开当前目录,open 文件 用默认应用打开,open -a "应用名" 文件 指定应用,open -b com.apple.TextEdit 文件 用 bundle identifier 指定应用,open -R 文件 在 Finder 中定位而不是打开。
-e 强制用 TextEdit 打开,-t 用默认文本编辑器,-W 等待应用退出,-n 启动新实例,-g 不把应用带到前台,-j 隐藏启动,-u 按 URL 打开,-f 从标准输入读取内容并交给文本编辑器,--args 把后续参数传给应用。-h 用于搜索并打开 SDK 头文件,需要安装 Xcode 命令行工具。
这是 macOS 专有命令,Linux 没有直接等价物(桌面环境常用 xdg-open),Windows 可用 start。open 默认立即返回,脚本需要等待编辑完成时必须加 -W。
# 在 Finder 中打开当前目录
% open .
# 用指定应用打开 Markdown 文件
% open -a "Visual Studio Code" report.md
# 用 bundle identifier 精确指定应用,避免应用重名
% open -b com.apple.TextEdit notes.txt
# 在 Finder 中定位文件,而不是打开它
% open -R ~/Downloads/archive.zip
# 等待应用退出,适合把 GUI 编辑器当 $EDITOR 用
% open -W -n -a "TextEdit" report.md
# 用默认浏览器打开 URL
% open -u "https://developer.apple.com"
# 把命令输出直接交给文本编辑器
% printf 'hello\n' | open -f
-R 是在 Finder 中显示文件,不会打开文件;要打开文件去掉 -R。-a 按应用名查找,重名或本地化名称会导致选错应用。脚本里优先用 -b 的 bundle identifier 或应用的完整路径。open 默认不等待,紧接着读取应用生成的文件可能读到旧内容。需要同步时加 -W,并注意 -W 会阻塞脚本直到应用退出。open 报 No application knows how to open,通常是 Launch Services 数据库或文件扩展名关联问题;用 -a 指定应用可绕过。--env NAME=VALUE。open 不会替你绕过;不要用删除 quarantine 属性代替正常放行流程。合上页面,先回答,再展开对照。
open -R 文件 与 open 文件 的结果有什么不同?-a 和 -b 指定应用时各有什么优缺点?open 后立刻读取文件可能拿到旧内容?-R 只在 Finder 中定位文件,不打开;open 用默认应用打开文件。-a 直观但受应用名和本地化影响,-b 用 bundle identifier 更精确。open 默认立即返回,不会等待应用完成写入;需要同步时加 -W。
小程序版
微信扫码,随时查命令