Чтобы прочитать содержимое локального Markdown-файла в «Командах» на Mac, перед использованием преобразуйте входной файл в текст. Проверьте результат на временном образце; если преобразование не удастся, прочитайте файл с помощью cat и передайте его содержимое в команду.
Это руководство описывает выбор одного локального Markdown-файла в Finder и отображение его исходного текста, включая маркеры заголовков и знаки пунктуации в списках. Важно различать три вещи: выбранный файл, его путь и текст, хранящийся в нём.
Почему команда получает файл, а не его текст?
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, Ввод и вывод в оболочке.
Создайте команду Finder, которая явно запрашивает текст
Создайте команду с именем Read Markdown Text. Apple описывает создание команды с помощью кнопки добавления на панели инструментов, присвоение ей имени и добавление действий из библиотеки действий. Создание пользовательской команды на Mac.
Настройте точку входа из Finder:
- Откройте панель
Detailsкоманды. - Включите
Use as Quick Actionи выберитеFinder. - В блоке входных данных в верхней части редактора разрешите
FilesиText. Файлы нужны для работы с Finder, а текст — для описанного ниже способа через Терминал. - Для случая отсутствия входных данных выберите
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 указан как инструмент для просмотра содержимого текстовых файлов. В руководстве Apple по командной строке для «Команд» различаются файловый ввод с помощью -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.
Скобки ограничивают изменение параметров оболочки этой группой команд. 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 или воспользуйтесь документированной командой Терминала. При запуске команды из Dock выбранный файл не передаётся ей автоматически.
- Исходный текст пуст: Сравните его с образцом. Допустимый пустой файл и отсутствующий файл — разные случаи.
Apple отдельно описывает свойства переменных и преобразование типов содержимого, а также отмечает, что команды, запущенные из Dock, могут не получить начальные входные данные. Эти различия помогут найти причину сбоя, прежде чем менять последующие действия. Настройка переменных в «Командах» на Mac, Ограничение входных данных команды.
Во время тестирования используйте небольшой локальный текстовый файл. Для выбора нескольких файлов нужно отдельно решить, обрабатывать каждый файл или объединить их содержимое. Этот пример показывает, как получить читаемый исходный текст; он не предназначен для копирования файла побайтно.
Когда в предварительном просмотре появятся ожидаемый заголовок и строки списка, подключите последующие действия по обработке текста к выходу действия Text. Оставьте образец на месте, пока не заработает весь путь обработки, а затем удалите его временный каталог в Finder. Главное — убедиться, что следующее действие получает проверенное вами содержимое документа.
Источники
Понимание типов входных данных в «Командах» на Mac — поддержка Apple.
Механизм графа содержимого в «Командах» на Mac — поддержка Apple.
Настройка переменных в «Командах» на Mac — поддержка Apple.
Создание пользовательской команды на Mac — поддержка Apple.
Запуск команды во время работы на Mac — поддержка Apple.
Ограничение входных данных команды при запуске из другого приложения на Mac — поддержка Apple.
Навигация по списку действий в «Командах» на Mac — поддержка Apple.
Тестирование действий в «Командах» на Mac — поддержка Apple.
Просмотр текстовых файлов в Терминале на Mac — поддержка Apple.
Запуск команд из командной строки — поддержка Apple.
Введение в командную строку — архив документации Apple для разработчиков.
Ввод и вывод в оболочке — архив документации Apple для разработчиков.
mktemp(1): создание уникального имени временного файла — дистрибутивы Apple с открытым исходным кодом.
printf(1): форматированный вывод — дистрибутивы Apple с открытым исходным кодом.
test(1): утилита проверки условий — дистрибутивы Apple с открытым исходным кодом.