Выбрать главу

Код

Листинг 11.7. Сценарий open2

··#!/bin/bash

··# open2 — интеллектуальная обертка для крутой команды OS X 'open',

··#·· чтобы сделать ее еще практичнее. По умолчанию 'open' запускает

··#·· приложение, соответствующее указанному файлу или каталогу,

··#·· опираясь на настройки интерфейса Aqua, и может запускать

··#·· приложения, только если они находятся в каталоге /Applications.

··# First, whatever argument we're given, try it directly.

··if! open "$@" >/dev/null 2>&1; then

····if! open −a "$@" >/dev/null 2>&1; then

······# Больше одного аргумента? Непонятно, как обрабатывать их — выйти.

······if [$# −gt 1]; then

········echo "open: More than one program not supported" >&2

········exit 1

······else

········case $(echo $1 | tr '[: upper: ]' '[: lower: ]') in

··········activ*|cpu··) app="Activity Monitor"··;;

··········addr*········) app="Address Book"······;;

··········chat········) app="Messages"··········;;

··········dvd··········) app="DVD Player"········;;

··········excel········) app="Microsoft Excel"····;;

··········info*········) app="System Information";;

··········prefs········) app="System Preferences";;

··········qt|quicktime) app="QuickTime Player"··;;

··········word········) app="Microsoft Word"····;;

··········*············) echo "open: Don't know what to do with $1" >&2

··············exit 1

········esac

········echo "You asked for $1 but I think you mean $app." >&2

········open −a "$app"

······fi

····fi

··fi

··exit 0

Как это работает

Этот сценарий крутится вокруг нулевого и ненулевого кода, полученного от программы open, которая возвращает ноль в случае успеха и ненулевое значение в случае неудачи .

Если переданный аргумент не является именем файла, программа терпит неудачу и выполняется первое условие. Тогда сценарий пытается интерпретировать аргумент как имя приложения и добавляет в команду open флаг −a. Если программа терпит неудачу во второй раз, сценарий использует инструкцию case , чтобы проверить слова, которые пользователи часто вводят вместо верных названий популярных приложений.

Сценарий даже выводит дружественное сообщение, когда находит совпадение с одним из имен, непосредственно перед запуском приложения.

$ open2 excel

You asked for excel but I think you mean Microsoft Excel.

Запуск сценария

Сценарий open2 готов получить из командной строки одно или несколько имен файлов или приложений.

Результаты

Без этой обертки попытка открыть приложение Microsoft Word терпит неудачу:

$ open "Microsoft Word"

The file /Users/taylor/Desktop//Microsoft Word does not exist.

Угрожающее, казалось бы, сообщение появилось только потому, что пользователь забыл добавить флаг −a. Аналогичная попытка, но со сценарием open2, показывает, что больше нет необходимости помнить о флаге −a:

$ open2 "Microsoft Word"

$

Отсутствие вывода — хороший знак: приложение запущено и готово к использованию. Дополнительная поддержка коротких имен для обычных в OS X приложений обеспечивает успех команды open2 word, тогда как open −a word терпит неудачу.

Усовершенствование сценария

Сценарий определенно выиграл бы, если бы список коротких имен соответствовал вашим личным потребностям или потребностям вашего сообщества пользователей. И это легко достижимо!

Глава 12. Сценарии для игр и развлечений

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

Не волнуйтесь — мы не предлагаем вам написать Fallout 4. Просто так получилось, что некоторые простые игры легко можно создать в виде сценариев командной оболочки. И разве не лучше учиться отладке сценариев на примере чего-то более забавного, чем утилита для приостановки действия учетной записи или анализа журнала ошибок Apache?

Для некоторых сценариев вам потребуются файлы, размещенные по адресу: http://www.nostarch.com/wcss2/. Загрузите этот архив прямо сейчас, если вы его еще не скачали.