macOS下Bash+AppleScript实现Apple Notes保留换行添加剪贴板内容
解决macOS下Bash脚本向Apple Notes追加剪贴板内容时换行失效的问题
问题核心在于Apple Notes的笔记内容实际以HTML格式存储,而非纯文本。你之前的代码将HTML转成纯文本处理,再拼接回去时丢失了格式信息,导致换行失效。以下是修正后的脚本:
#!/bin/bash # 获取剪贴板内容,将换行转为HTML的<br>标签,同时转义双引号和反斜杠 CLIPBOARD_CONTENT=$(pbpaste | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/\n/<br>/g') /usr/bin/osascript <<EOD tell application "Notes" set targetNote to first note whose name is "Clipboard" set currentHTML to body of targetNote # 提取标题(假设标题是HTML的第一行内容,即第一个<br>之前的部分) set titleEnd to offset of "<br>" in currentHTML if titleEnd > 0 then set noteTitle to text 1 thru (titleEnd - 1) of currentHTML set restOfBody to text (titleEnd + 4) thru end of currentHTML # 拼接新的HTML内容:标题 + 换行 + 剪贴板内容 + 换行 + 原有正文 set newHTML to noteTitle & "<br><br>" & "$CLIPBOARD_CONTENT" & "<br><br>" & restOfBody else # 如果笔记只有标题,直接追加剪贴板内容 set newHTML to currentHTML & "<br><br>" & "$CLIPBOARD_CONTENT" end if set body of targetNote to newHTML end tell EOD
关键修正点:
- 格式转换:把剪贴板里的换行符
\n替换为HTML的<br>标签,这是Notes识别换行的正确方式。 - 特殊字符转义:先转义反斜杠和双引号,避免AppleScript解析here-doc时出现语法错误。
- 直接操作HTML:不再将Notes的body转为纯文本,而是直接处理原始HTML结构,确保格式被正确保留。
- 标题与正文分离:通过查找第一个
<br>标签来拆分标题和正文,保证新内容被插入到标题之后、原有正文之前。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

