Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
После определения имени Music Folder остается только сгенерировать списки музыкальных произведений в двух системах Mac, затем с помощью команды diff сравнить их, чтобы увидеть, какие альбомы являются уникальными в той или иной системе, и, возможно, синхронизировать их.
Запуск сценария
Этот сценарий не имеет ни аргументов, ни флагов.
Результаты
Если у вас накопилась большая коллекция музыки, этот сценарий может вывести длинный список. В листинге 11.6 показаны первые 15 строк из коллекции Дейва.
Листинг 11.6.Запуск сценария ituneslist для вывода первых элементов в коллекции iTunes
$ ituneslist | head -15
Your library is at /Users/taylor/Music/iTunes/iTunes Media/
Audiobooks/Andy Weir
Audiobooks/Barbara W. Tuchman
Audiobooks/Bill Bryson
Audiobooks/Douglas Preston
Audiobooks/Marc Seifer
Audiobooks/Paul McGann
Audiobooks/Robert Louis Stevenson
iPod Games/Klondike
Movies/47 Ronin (2013)
Movies/Mad Max (1979)
Movies/Star Trek Into Darkness (2013)
Movies/The Avengers (2012)
Movies/The Expendables 2 (2012)
Movies/The Hobbit The Desolation of Smaug (2013)
Усовершенствование сценария
Это не совсем усовершенствование, но… Поскольку путь к каталогу с медиатекой iTunes хранится как полный URL, было бы интересно попробовать создать в Интернете каталог iTunes и затем указать его URL как значение поля Music Folder в файле XML file.
№ 82. Исправление команды open
Одним из примечательных новшеств OS X, стала команда open, позволяющая легко запускать приложение, соответствующее файлу того или иного типа, будь то графическое изображение, документ PDF или электронная таблица Excel. Проблема команды open заключается в некоторой ее придирчивости. Чтобы запустить приложение по имени, необходимо добавить флаг −a. А если указать неточное имя приложения, команда сообщит об ошибке. Эта задача как раз для сценария-обертки, такого как в листинге 11.7.
Код
Листинг 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.
Чтобы что-то зашифровать по алгоритму rot13, это «что-то» нужно передать команде tr:
Читать дальшеИнтервал:
Закладка: