Листинг 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/. Загрузите этот архив прямо сейчас, если вы его еще не скачали.
ДВА КОРОТКИХ ТРЮКА
Здесь мы покажем два коротких примера, чтобы пояснить, что мы имеем в виду. Во-первых, пользователи, заставшие Usenet, хорошо знают алгоритм rot13 , помогающий сделать непристойные шуточки и оскорбления менее читаемыми. Это алгоритм подстановочного шифрования , поразительно легко реализуемый в Unix.
Читать дальше