Для большей надежности следовало бы проверить код, возвращаемый командой open, но мы оставим это вам, уважаемый читатель, в качестве самостоятельного упражнения, хорошо?
Затем сценарий гарантирует наличие подкаталога gsync в папке Google Drive, создавая его при необходимости, и затем просто копирует туда указанные файлы, используя удобный ключ −a в команде cp, чтобы предотвратить искажение времени создания и последнего изменения.
Просто передайте сценарию один или несколько файлов, которые вам хотелось бы синхронизировать с вашей учетной записью Google Drive, и сценарий сделает все необходимое для этого.
Это круто, правда. Укажите файл, который нужно скопировать в Google Drive, как показано в листинге 13.9.
Листинг 13.9.Запуск Google Drive и синхронизация файлов с помощью сценария syncgdrive
$ syncgdrive sample.crontab
Starting up Google Drive daemon…
Copying file sample.crontab to your Google Drive
$ syncgdrive ~/Documents/what-to-expect-op-ed.doc
Copying file /Users/taylor/Documents/what-to-expect-op-ed.doc to your Google
Drive
Обратите внимание, что в первом случае был произведен также запуск демона Google Drive. После нескольких секунд ожидания, необходимых на копирование файлов в облачную систему хранения, они появились в веб-интерфейсе Google Drive, как показано на рис. 13.1.
Рис. 13.1.Шаблон файла crontab и офисный документ, синхронизированные с Google Drive, автоматически появились в веб-интерфейсе
Усовершенствование сценария
В описании сценария допущена небольшая некорректность: когда вы указываете файл для синхронизации, сценарий не предохраняет его от рассинхронизации в будущем; он просто копирует файл один раз и все. По-настоящему интересным усовершенствованием стало бы создание более мощной версии этого сценария, которой можно было бы передать файлы для копирования, и которая регулярно проверяла бы их и копировала обновленные версии в каталог gsync .
В состав OS X входит сложная система синтеза речи, которая может голосом сказать, что происходит в вашей системе. Обычно она находится в разделе Accessibility (Универсальный доступ), и вы наверняка оцените способность компьютера вслух сообщать об ошибках или читать файлы.
Как оказывается, весь функционал этой системы и пакет разнообразных голосов доступны также из командной строки, через встроенную утилиту say. Ее можно проверить следующей командой:
$ say "You never knew I could talk to you, did you?"
Мы знали, что вам это понравится!
С этой программой можно сделать много чего, но для начала напишем сценарий-обертку, который поможет выявить установленные голоса и послушать, как они звучат. Сценарий в листинге 13.10 не заменяет команду say; он лишь упрощает работу с ней (обычное дело для подобных сценариев в этой книге).
Листинг 13.10.Сценарий sayit
#!/bin/bash
# sayit — использует команду "say" для всего, что будет указано (только для OS X).
dosay="$(which say) −quality=127"
format="$(which fmt) −w 70"
voice="" # По умолчанию системный голос.
rate=""··# По умолчанию стандартная скорость произношения.
demovoices()
{
··# Предлагает прослушать произношение каждым доступным голосом.
··voicelist=$(say −v \? | grep "en_" | −c— c1-12 \
····| sed 's/ /_/;s/ //g;s/_$//')
··if ["$1" = "list"]; then
····echo "Available voices: $(echo $voicelist | sed 's/ /, /g;s/_/ /g') \
······| $format"
····echo "HANDY TIP: use \"$(basename $0) demo\" to hear all the voices"
····exit 0
··fi
··for name in $voicelist; do
····myname=$(echo $name | sed 's/_/ /')
····echo "Voice: $myname"
····$dosay −v "$myname" "Hello! I'm $myname. This is what I sound like."
··done
··exit 0
}
usage()
{
··echo "Usage: sayit [-v voice] [-r rate] [-f file] phrase"
··echo " or: sayit demo"
··exit 0
}
while getopts "df: r: v: " opt; do
··case $opt in
····d) demovoices list··;;
····f) input="$OPTARG"··;;
····r) rate="-r $OPTARG";;
····v) voice="$OPTARG"··;;
··esac
done
shift $(($OPTIND — 1))
if [$# −eq 0 −a — z "$input"]; then
··$dosay "Hey! You haven't given me any parameters to work with."
··echo "Error: no parameters specified. Specify a file or phrase."
··exit 0
fi
if ["$1" = "demo"]; then
Читать дальше