Дейв Тейлор - Сценарии командной оболочки. 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-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
$ cat −v mac-format-file.txt
The rain in Spain^Mfalls mainly on^Mthe plain.^MNo kidding. It does.^M $
Очевидно, что здесь что-то не так! К счастью можно воспользоваться командой tr и с ее помощью заменить символы возврата каретки символами перевода строки.
$ tr '\r' '\n' < mac-format-file.txt > unix-format-file.txt
Применение этой команды к типичному файлу дает более осмысленным результат.
$ tr '\r' '\n' < mac-format-file.txt
The rain in Spain
falls mainly on
the plain.
No kidding. It does.
Если, открыв файл в приложении для Mac, таком как Microsoft Word, вы видите ступеньки, убегающие вправо, попробуйте выполнить обратную замену символа, обозначающего конец строки — для приложений с графическим интерфейсом Aqua.
$ tr '\n' '\r' < unixfile.txt > macfile.txt
Мы продемонстрировали только одно из небольших отличий, характерных для OS X. Нам придется иметь дело со всеми этими странностями, но и все замечательные преимущества OS X тоже к нашим услугам.
А теперь перейдем к делу, хорошо?
№ 79. Автоматизация захвата изображения экрана
Если вы пользуетесь Mac уже некоторое время, то наверняка знаете о встроенной функции захвата изображения с экрана, привязанной к комбинации клавиш -SHIFT-3. C той же целью можно использовать утилиты OS X, Preview и Grab, находящиеся в папках Applications (Программы) и Utilities (Утилиты) соответственно, а кроме того, существует богатый выбор сторонних программ.
Но знаете ли вы, что есть и альтернатива для командной строки? Сверхполезная программа screencapture может сделать снимок экрана и сохранить его в буфере обмена или в файле с указанным именем (в формате JPEG или TIFF). Введите команду с неподдерживаемым аргументом, и вы увидите справку с описанием основ работы с программой, как показано ниже:
$ screencapture −h
screencapture: недопустимый параметр −h
порядок использования: screencapture [-icMPmwsWxSCUtoa] [files]
··-c········ поместить снимок экрана в буфер обмена
··-C········ сохранить изображение указателя мыши на экране. только··············в неинтерактивных режимах
··-d········ выводить ошибки в диалоге с графическим интерфейсом
··-i········ захватить изображение интерактивно, выбранной области или окна
·············· клавиша control — заставляет поместить снимок в буфер обмена
·············· клавиша пробела — переключает между режимами захвата области,
································ выбранной мышью, и окна
·············· клавиша escape··- отменяет интерактивный захват изображения экрана
··-m········ захватить изображение только на основном мониторе, игнорируется··············с флагом −i
··-M········ поместить снимок экрана в новое электронное письмо
··-o········ в режиме захвата окна не захватывать тень от окна
··-P········ открыть снимок экрана в программе Preview
··-s········ разрешить только режим захвата выбранной области
··-S········ в режиме захвата окна захватить экран, а не окно
··-t формат создаваемого изображения, по умолчанию png
············ (поддерживаются также pdf, jpg, tiff и другие форматы)
··-T Выполнить захват с задержкой секунд, по умолчанию 5
··-w········ разрешить только режим захвата окна
··-W········ начать взаимодействие в режиме захвата окна
··-x········ не проигрывать звуки
··-a········ не включать окна, присоединенные к выбранным окнам
··-r········ не добавлять метаданные о разрешении (dpi) в изображение
··-l захватить окно с идентификатором
··-R захватить указанную область на экране
··files··где сохранить снимок экрана, 1 на экран
Это приложение так и просит написать для него сценарий-обертку. Например, чтобы сделать снимок экрана с задержкой 30 секунд, можно использовать следующую команду:
$ sleep 30; screencapture capture.tiff
Но давайте придумаем что-нибудь поинтереснее, согласны?
Код
Листинг 11.1 демонстрирует, как можно автоматизировать работу с утилитой screencapture для скрытного создания снимков экрана.
Листинг 11.1.Сценарий-обертка screencapture2
··#!/bin/bash
··# screencapture2 — использует команду screencapture в OS X для создания
··#·· серии скриншотов главного окна в скрытном режиме. Удобно, если вы
··#·· находитесь в сомнительном вычислительном окружении!
··capture="$(which screencapture) −x — m −C"
··freq=60···· # Каждые 60 секунд.
··maxshots=30··# Максимальное число скриншотов.
··animate=0·· # Создать анимированный gif? Нет.
··while getopts "af: m" opt; do
····case $opt in
······a) animate=1;········;;
······f) freq=$OPTARG;····;;
······m) maxshots=$OPTARG;;; # Завершить после создания заданного числа снимков.
······?) echo "Usage: $0 [-a] [-f frequency] [-m maxcaps]" >&2
··········exit 1
····esac
··done
··counter=0
··while [$counter −lt $maxshots]; do
····$capture capture${counter}.jpg # Счетчик counter постоянно увеличивается.
····counter=$((counter + 1))
····sleep $freq·· # т. е. freq — число секунд между снимками.
··done
··# Теперь, если требуется, сжать все отдельные снимки в один анимированный GIF.
··if [$animate −eq 1]; then
····convert −delay 100 −loop 0 −resize "33 %" capture* animated-captures.gif
··fi
··# Не возвращать никаких других кодов состояния для скрытности.
··exit 0
Как это работает
Этот сценарий делает снимки экрана через каждые $freq секунд , пока не будет достигнуто количество $maxshots (по умолчанию создается 30 снимков с интервалом 60 секунд между ними). Затем создается серия файлов JPEG, последовательно пронумерованных начиная с 0. Все это может пригодиться, если вы создаете обучающие материалы или хотите определить, пользовался ли кто-то вашим компьютером в ваше отсутствие. Запустите сценарий и увидите, что происходило, если этот «кто-то» не оказался умнее.
Последний раздел сценария самый интересный: при необходимости он создает анимированный GIF в одну треть размера оригинала, используя инструмент преобразования из пакета ImageMagick . Это удобный способ просмотреть сразу все изображения. В главе 14 мы найдем для ImageMagick большое количество применений! Если в вашей системе OS X этот инструмент отсутствует, то с помощью диспетчера пакетов, такого как brew, вы сможете установить его одной командой (brew install imagemagick).
Запуск сценария
Поскольку этот сценарий предназначен для скрытной работы, в простейшем виде команда его запуска выглядит так:
Читать дальшеИнтервал:
Закладка: