Чтобы проверить, успешно ли выполнился shell-скрипт в Быстрой команде на Mac, перехватите его код завершения сразу после выполнения и передайте это число в виде текста. В приложении «Быстрые команды» добавьте действие Выполнить shell-скрипт, затем используйте действие Если для ветвления на основе возвращенного значения: 0 означает успех согласно соглашениям оболочки; ненулевое значение указывает на ошибку или иной неуспешный результат. Этот метод делает проверку статуса явной, избавляя от предположений, что быстрая команда сама предоставляет отдельную переменную со статусом.

Добавьте действие оболочки и перехватите статус

Откройте нужную быструю команду в приложении «Быстрые команды» на вашем Mac. Найдите в библиотеке действий Выполнить shell-скрипт (Run Shell Script) и добавьте его. Apple описывает действия со shell-скриптами как часть экосистемы Быстрых команд для Mac, хотя руководство пользователя Shortcuts не документирует каждую отдельную настройку или нюанс версии для этого действия. Если оно отсутствует в вашей библиотеке действий, не заменяйте его похожим по названию действием из Automator в надежде на идентичное поведение; проверьте список действий, доступных на вашем Mac. Обзор Быстрых команд от Apple

В поле скрипта поместите команду выполнения скрипта на одной строке, а на следующей же строке перехватите $?. Например, если скрипт является исполняемым и находится по наглядному пути, приведенному ниже:

/Users/yourname/Scripts/refresh-files.sh >/dev/null
script_status=$?
printf '%s' "$script_status"

Замените пример пути на реальный путь к вашему скрипту. Перенаправление отправляет стандартный вывод (stdout) скрипта в /dev/null, благодаря чему текстовый вывод действия содержит только числовой код статуса. Удалите >/dev/null, если вам также нужен вывод самого скрипта, однако в этом случае возвращаемый текст может содержать как этот вывод, так и статус. Стандартный поток ошибок (stderr) этим перенаправлением не подавляется.

$? содержит код завершения последней выполненной команды. Именно поэтому присваивание должно происходить сразу после вызова скрипта: если сначала выполнится другая команда, $? будет описывать уже ее результат. Затем printf выводит сохраненное число в виде текста, который «Быстрые команды» могут использовать как результат действия. Руководство Apple по рабочим процессам со shell-скриптами на Mac

Настройте ветвление по возвращенному числу

Добавьте действие Если (If) после действия Выполнить shell-скрипт. Укажите входными данными для него вывод действия оболочки, выберите текстовое условие совпадает с (is) и введите 0. Действия, выполняемые при успехе, расположите внутри блока Если, а обработку ошибок — в блоке Иначе (Otherwise). Действие «Если» в Быстрых командах на Mac направляет процесс по одному из двух путей в зависимости от настроенного условия. Руководство Apple по действиям «Если» в Быстрых командах на Mac

Относитесь к результату как к тексту, поскольку действие оболочки выводит его именно в таком виде. Успешный запуск должен возвращать 0; ненулевой результат должен направлять выполнение по второй ветке. В ветку ошибки можно добавить действие Показать предупреждение (Show Alert) и включить значение кода в сообщение либо передать его в следующее действие для записи в журнал. В shell-скриптах разные ненулевые значения часто служат для разграничения причин ошибок, поэтому сохранение кода помогает при диагностике.

Как избежать распространенных ошибок при проверке статуса

Не указывайте echo $? в последующем действии в надежде, что переменная будет ссылаться на запущенный ранее процесс оболочки. Каждое действие оболочки запускает собственный независимый процесс; $? имеет смысл только внутри той же сессии оболочки и непосредственно после команды, статус которой вам требуется. Точно так же вывод статуса до запуска скрипта лишь напечатает результат выполнения того, что работало до него.

Если скрипт выполняет несколько команд, его итоговый код завершения может зависеть от логики самого скрипта. Например, последующая успешно выполненная команда может скрыть предшествующую ошибку, если в скрипте не настроена явная передача или обработка этого сбоя. Быстрая команда может выполнять ветвление только на основании того статуса, который скрипт вернет в самом конце. Проверьте встроенную обработку ошибок в скрипте, если возвращаемый результат не отражает интересующий вас этап.

При запуске быстрой команды из Терминала

Если ваша задача — проверить из Терминала, завершилась ли успешно вся быстрая команда целиком, Apple документирует отдельную команду shortcuts: shortcuts run "Shortcut Name". Эта команда возвращает 0, если запуск быстрой команды прошел успешно, и 1 при возникновении ошибки. Это статус вызова самой быстрой команды, а не выделенная переменная, содержащая код выхода внутреннего действия оболочки. Чтобы использовать собственный статус скрипта в ветвлении внутри быстрой команды, перехватите и выведите его внутри действия оболочки, как описано выше. Руководство Apple по командной строке для Быстрых команд на Mac

Практическая схема предельно проста: запустите скрипт, сразу же сохраните $?, выведите это сохраненное значение и сравните полученный текст с 0 в действии «Если». Это дает Быстрой команде на Mac четкие сценарии успеха и сбоя, привязывая логику к реальному результату завершения скрипта.

Источники