Mac下使用open -a Terminal.app执行脚本失效问题求助
open -a Terminal.app无法自动执行脚本的问题 我来帮你梳理这个问题的解决思路和替代方案:
问题根源分析
你遇到的情况大概率是Mojave 10.14.3 Beta版本的系统bug,结合控制台抛出的/usr/bin/open subsystem: com.apple.launchservices "Unable to load Info.plist exceptions (eGPUOverrides)"错误,说明负责处理open命令的LaunchServices服务在解析参数时出现了异常,再加上你用的是Homebrew安装的bash 5.0.0(而非系统默认bash),可能加重了兼容性问题。
可行替代方案
下面几个方法可以帮你实现“打开新终端并自动运行脚本”的需求:
1. 给Terminal传递启动参数
用open的--args参数直接指定终端要执行的命令,绕过LaunchServices的参数解析问题:
open -a Terminal.app --args -c "bash /完整路径/Myscript"
如果你的脚本已经设置了可执行权限(chmod +x Myscript),也可以简化成:
open -a Terminal.app --args -c "/完整路径/Myscript"
这里一定要用脚本的绝对路径,避免终端默认shell的工作目录差异导致找不到脚本。
2. 用AppleScript精确控制Terminal
AppleScript可以直接向Terminal发送执行指令,不受open命令的bug影响,命令行直接执行即可:
osascript -e 'tell application "Terminal" to do script "/完整路径/Myscript"'
如果想在当前终端标签页执行(而非新窗口),可以修改成:
osascript -e 'tell application "Terminal" to do script "/完整路径/Myscript" in front window'
3. 临时修改Terminal默认启动行为
如果需要频繁运行这个脚本,可以临时调整Terminal的偏好设置:
- 打开Terminal,点击顶部菜单栏的
Terminal > 偏好设置 - 切换到
通用标签页 - 在
打开shell时使用选项中选择命令(完整路径),输入bash /完整路径/Myscript - 用完记得改回原来的设置(比如你Homebrew安装的bash路径
/usr/local/bin/bash)
尝试修复系统bug
你可以试试重置LaunchServices数据库,修复可能的plist配置异常:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
执行完后重启Mac,再测试原来的open -a Terminal.app Myscript命令是否恢复正常。
额外建议
因为你使用的是Beta版本系统,这类兼容性问题很常见,建议你通过Apple的Beta反馈渠道提交这个问题,附上控制台的错误日志和你的环境信息(Homebrew安装的bash版本、脚本权限等),帮助Apple定位修复这个bug。
内容的提问来源于stack exchange,提问作者D-VR

