要在 Mac 快捷指令中读取本地 Markdown 文件的内容,请先将文件输入转换为文本再使用。用一个可丢弃的示例检查结果;如果转换失败,请使用 cat 读取文件,并将其内容通过管道传入快捷指令。
本指南介绍如何在 Finder 中选择一个本地 Markdown 文件,并显示其原始文本,包括标题标记和列表标点。关键是区分三者:所选文件、文件路径,以及文件中存储的文本。
为什么快捷指令收到的是文件,而不是文件中的文本?
Finder 提供的是文件输入。Apple 将 Files 和 Text 定义为快捷指令中两种不同的输入类型:文件可以是任何类型的文档,而文本是不带格式的纯文本。因此,接收 Markdown 文件本身并不能保证下一个操作会将其内容作为文本接收。了解 Mac 快捷指令中的输入类型。
当操作需要不同类型的数据时,快捷指令会使用其内容图进行类型转换。Apple 也介绍了一种明确的控制方式:点按变量标记并更改其 Type。这种转换不同于选择文件名之类的属性。文件名或路径仍然只是对文件的描述。内容图引擎、在 Mac 快捷指令中调整变量。
Apple 引用的指南介绍了转换机制,但并未保证所有扩展名为 .md 的文件都会转换成其原始文本。请用已知内容验证转换结果。如果原生转换没有得到预期文本,下面的命令行方法会提供一条明确的文件读取路径。
创建一个内容已知、可丢弃的 Markdown 文件
使用这个合成样例,避免把文件名误当作读取成功的证据。将完整设置命令粘贴到终端中。它会创建一个新的临时目录,写入一个示例文件,并在 Finder 中打开该目录。
demo_dir=$(/usr/bin/mktemp -d /tmp/markdown-shortcuts.XXXXXX) &&
printf '%s\n' '# Sample board' '' '- Blue square' '- Green circle' > "$demo_dir/sample.md" &&
/usr/bin/open "$demo_dir"
预期的文件内容如下:
# Sample board
- Blue square
- Green circle
-d 选项告诉 mktemp 创建目录,末尾的 X 字符允许它选择一个唯一名称。因此,每次成功运行设置命令都会得到一个新的目录。如果创建失败,&& 链会阻止后续命令运行。Apple 提供了相关的 mktemp 手册。
printf 命令会写入合成示例的各行内容,包括空行。其输出重定向会在新目录中创建 sample.md。普通的 > 重定向可能覆盖已有文件,因此请保留此设置原样,不要将目标改为已有文档。这个示例通过新目录避免名称冲突。Apple 的 printf 手册、Shell 输入和输出。
创建一个明确请求文本的 Finder 快捷指令
创建一个名为 Read Markdown Text 的快捷指令。Apple 介绍了如何使用工具栏中的添加按钮创建快捷指令、为其命名,并从操作库添加操作。在 Mac 上创建自定义快捷指令。
设置 Finder 入口:
- 打开快捷指令的
Details面板。 - 启用
Use as Quick Action,并选择Finder。 - 在编辑器顶部的输入区块中允许
Files和Text。Files支持 Finder 工作流;Text则供下方的终端备用方法使用。 - 对于缺失的输入,选择
Stop and Respond,并输入Select one example Markdown file.
Apple 介绍了 Finder 选项,并指出可能需要文件或文件夹输入才能启用它。其输入配置也支持在没有收到输入时停止并返回响应。在 Mac 上工作时运行快捷指令、限制快捷指令的输入。
现在添加处理内容的操作:
- 添加一个
Text操作。 - 在其文本栏中只放入
Shortcut Input变量。 - 点按该变量标记,打开其
Type菜单,然后选择Text。不要选择文件名属性。 - 在
Text操作之后添加Quick Look,并使用Text操作的输出。
明确地转换变量类型,就能在使用输入时请求文本。后续的 Text 操作输出就是接下来文本处理步骤要使用的值。Apple 介绍了如何通过变量编辑器更改变量类型。在 Mac 快捷指令中调整变量。
要确认你所安装版本的行为,请按住 Control 键并点按某个操作的图标,然后选择 Show Info。Apple 说明这是检查操作可接受的输入及其输出的方式。调整包含多个文件变量和文本变量的现有快捷指令时,这尤其有用。在 Mac 快捷指令中浏览操作列表。
在 Finder 中,只选择 sample.md,按住 Control 键并点按它,然后依次选择 Quick Actions 和 Read Markdown Text。Apple 介绍了这种运行方式。如果找不到该快捷指令,请先检查其 Finder 设置和可接受的输入类型。在 Mac 上工作时运行快捷指令。
成功的结果会包含 # Sample board 和两个列表项。只看到 sample.md 或其目录路径都不能通过此检查。Apple 建议在操作之间放置 Quick Look,以检查快捷指令中传递的内容。在 Mac 快捷指令中测试操作。
如果转换失败,先读取文件内容,再调用快捷指令
使用终端明确执行读取操作。Apple 的终端指南指出,cat 可用于查看文本文件内容。其快捷指令命令行指南区分了通过 -i 提供的文件输入,以及通过管道提供的文本。在 Mac 终端中查看文本文件、从命令行运行快捷指令。
以下命令是前面设置示例的后续步骤,并非独立程序。在设置成功后,于同一个终端标签页中运行,并确保快捷指令已保存为准确名称 Read Markdown Text:
(
set -o pipefail
if [ -f "$demo_dir/sample.md" ] && [ -r "$demo_dir/sample.md" ]; then
/bin/cat "$demo_dir/sample.md" |
/usr/bin/shortcuts run "Read Markdown Text"
else
printf '%s\n' 'The example file is missing or unreadable.' >&2
exit 1
fi
)
这里,cat 会读取文件,并将其内容写入标准输出。管道会将这些内容传递给快捷指令。给路径加上引号可确保它作为一个整体参数传入。-f 和 -r 检查要求文件存在、是普通文件且可读。命令行入门、Apple 的 test 手册。
括号会将对 shell 选项的更改限制在这个命令组内。pipefail 会使管道中某个阶段的失败反映在命令组的退出状态中。前置检查无法保证文件在之后读取时仍然可用;如果 cat 遇到读取错误,请检查该错误,不要将不完整的预览当作完整结果。
这种备用方法会将传入快捷指令的内容从文件改为文本。它不会重命名 Markdown 文件,也不会创建转换后的文档。现有的 Text 和 Quick Look 操作可以检查传入的文本。
以下三种命令形式含义不同:
| 命令形式 | 快捷指令收到的内容 |
|---|---|
shortcuts run "Read Markdown Text" -i "$demo_dir/sample.md" |
文件输入;仍需在快捷指令内进行转换。 |
printf '%s\n' "$demo_dir/sample.md" | shortcuts run "Read Markdown Text" |
以文本形式传入的路径名。 |
cat "$demo_dir/sample.md" | shortcuts run "Read Markdown Text" |
通过标准输入传入的文件内容。 |
此表说明了 Apple 所介绍的区别:使用 -i 传递文件路径,使用管道传递文本。管道前执行的操作决定了该文本是路径名还是文档正文。从命令行运行快捷指令。
添加更多操作前,先诊断结果
用已知样例判断需要修正什么:
- 只显示文件名: 检查变量是否提取了名称属性,而不是请求文本。
- 只显示路径: 检查命令是否打印了路径,而不是读取文件。
- 原生转换失败,但终端方法可用: 对此工作流使用明确的读取方法;只更改输入标签并不能解决转换问题。
- 没有收到输入: 从已选中的 Finder 文件运行,或使用文档介绍的终端命令。在程序坞中启动快捷指令不会自动传入所选文件。
- 源内容为空: 对照样例检查。有效的空文件和不存在的文件是不同情况。
Apple 将变量属性与内容类型转换分开介绍,并指出从程序坞启动的快捷指令可能没有收到初始输入。这些区别有助于在更改后续操作之前找到问题所在。在 Mac 快捷指令中调整变量、限制快捷指令的输入。
测试时,请将工作流限制在一个小型本地文本文件内。选择多个文件时,需要另行决定是逐个处理,还是合并其内容。此示例用于获取可读取的源文本,并非逐字节复制文件的流程。
预览中出现预期的标题和列表行后,将后续文本处理操作连接到 Text 操作的输出。保留合成样例,直到整个流程正常工作,然后在 Finder 中删除其临时目录。关键检查很简单:下一个操作必须收到你已验证过的文档正文。
来源
了解 Mac 快捷指令中的输入类型 — Apple 支持。
Mac 快捷指令中的内容图引擎 — Apple 支持。
在 Mac 快捷指令中调整变量 — Apple 支持。
在 Mac 上创建自定义快捷指令 — Apple 支持。
在 Mac 上工作时运行快捷指令 — Apple 支持。
在 Mac 上从其他应用运行快捷指令时限制其输入 — Apple 支持。
在 Mac 快捷指令中浏览操作列表 — Apple 支持。
在 Mac 快捷指令中测试操作 — Apple 支持。
在 Mac 上的终端中查看文本文件 — Apple 支持。
从命令行运行快捷指令 — Apple 支持。
命令行入门 — Apple 开发者文档存档。
Shell 输入和输出 — Apple 开发者文档存档。
mktemp(1):生成临时文件名(唯一) — Apple 开源发行版。
printf(1):格式化输出 — Apple 开源发行版。
test(1):条件判断实用工具 — Apple 开源发行版。