fi
exit 0
Как это работает
Ключевую роль в этом сценарии играют две строки со значками и . Первая вызывает команду ps и затем использует последовательность команд grep, чтобы отыскать требуемое приложение — Dropbox.app — и одновременно исключить из результатов саму команду grep. Если получится непустая строка, значит, Dropbox действует в режиме демона (демоном называется программа, которая предназначена для работы в фоновом режиме, 24 часа в сутки, 7 дней в неделю, и решает те или иные задачи, не требуя вмешательства пользователя), и на этом все.
Если программа Dropbox.app не запущена, сценарий вызывает команду open в OS X, которая сама отыщет приложение и запустит его.
Запуск сценария
Если сценарий вызывается с флагом −s, он ничего не выводит. Но по умолчанию выводится информация о состоянии программы, как показано в листинге 13.2.
Результаты
Листинг 13.2. Вызов сценария startdropbox для запуска Dropbox.app
$ startdropbox
Launching Dropbox.app
$ startdropbox
Dropbox.app is running with PID 22270
Усовершенствование сценария
В этом сценарии мало что можно усовершенствовать, но, если вы пожелаете перенести его в систему Linux, не забудьте установить официальные пакеты Dropbox с веб-сайта проекта. Запустить Dropbox (после правильной настройки) можно командой startdropbox.
№ 90. Синхронизация с Dropbox
Не составляет труда написать сценарий, синхронизирующий папку или набор файлов с облачной системой, такой как Dropbox. Система сама заботится о синхронизации содержимого локального каталога Dropbox с копией в облаке, обычно эмулируя локальный жесткий диск в системе.
Сценарий в листинге 13.3, syncdropbox, пользуется этим обстоятельством и позволяет легко и просто скопировать каталог с файлами или заданный набор файлов во вселенную Dropbox. В первом случае копируются все файлы в каталоге; во втором — файлы из заданного списка сбрасываются в папку sync в Dropbox.
Код
Листинг 13.3. Сценарий syncdropbox
#!/bin/bash
# syncdropbox — синхронизирует заданный набор файлов или указанную
#·· папку с хранилищем Dropbox. Это достигается путем копирования
#·· папки в ~/Dropbox или набора файлов в папку sync в Dropbox с последующим
#·· запуском Dropbox.app, если это необходимо.
name="syncdropbox"
dropbox="$HOME/Dropbox"
sourcedir=""
targetdir="sync" # Целевая папка в Dropbox для отдельных файлов.
# Проверить начальные аргументы.
if [$# −eq 0]; then
··echo "Usage: $0 [-d source-folder] {file, file, file}" >&2
··exit 1
fi
if ["$1" = "-d"]; then
··sourcedir="$2"
··shift; shift
fi
# Проверка допустимости.
if [! -z "$sourcedir" −a $# −ne 0]; then
··echo "$name: You can't specify both a directory and specific files." >&2
··exit 1
fi
if [! -z "$sourcedir"]; then
··if [! -d "$sourcedir"]; then
····echo "$name: Please specify a source directory with −d." >&2
····exit 1
··fi
fi
#######################
#### ГЛАВНЫЙ БЛОК
#######################
if [! -z "$sourcedir"]; then
··if [-f "$dropbox/$sourcedir" −o — d "$dropbox/$sourcedir"]; then
····echo "$name: Specified source directory $sourcedir already exists." >&2
····exit 1
··fi
··echo "Copying contents of $sourcedir to $dropbox…"
··# −a обеспечивает рекурсивное копирование с сохранением
··#·· информации о владельце и пр.
··cp −a "$sourcedir" $dropbox
else
··# Исходный каталог отсутствует, поэтому переходим к отдельным файлам.
··if [! -d "$dropbox/$targetdir"]; then
····mkdir "$dropbox/$targetdir"
····if [$? -ne 0]; then
······echo "$name: Error encountered during mkdir $dropbox/$targetdir." >&2
······exit 1
····fi
··fi
··# Все готово! Скопировать указанные файлы.
··cp −p — v "$@" "$dropbox/$targetdir"
fi
# Теперь запустить приложение Dropbox, если необходимо, чтобы выполнить
#·· фактическую синхронизацию.
exec startdropbox −s
Как это работает
Большая часть листинга выполняет проверку на наличие ошибок, что очень утомительно, но необходимо, чтобы гарантировать правильную работу сценария и ничего не испортить. (Никто не хочет потерять свои данные!)