Поиск:


Automator и терминал



Рубрика: Apple,Mac OS X,Программы,Статьи | автор macik | 24.06.09 | 22:09

Automator.pngНа днях у меня возник вопрос, как Automator сделать программу чтобы она автоматом запускала пару команд в терминале. По идеи нечего сложного, если подойти к вопросу с стороны макроса. То есть, вы просто записываете действие вашей мышки и клавиатуры, а потом запускаете. Но мне не очень нравится вариант метания курсора по экрану.
Вот и решил я поискать по Интернету информацию про то, как работать с Automator. Информации вроде не мало, но она больше связана с переименованием файлов и работой с картинками. Вообще стандартная инфа которой валом на apple.com. На каком-то русскоязычном ресурсе я наткнулся на вот это:

on run {input, parameters}
tell application «Terminal» (* действиями будет управлять терминал *)
activate (* запустить или сделать терминал активным, если запущен *)
if (the (count of the window) = 0) or (the busy of window 1 = true) then (* если нет открытых окон или активное акно занято *)
tell application «System Events» (* передаем действие системным событиям *)
keystroke «n» using command down (* создать новое окно *)
end tell (* закончили передачу действия системным событиям *)
end if (* закончили проверку *)
do script «cd \»» & (POSIX path of (input as string)) & «\»» in window 1 (*в окне 1 выполнить команду перехода к папке из которой запустили рабочий процесс *)
end tell (* закончили обращение к терминалу *)
return input
end run

Немного посмотрев и  покрутив программу методом научного тыкания, у меня получилось вот такой вариант:

on run {input, parameters}
tell application «Terminal» (* действиями будет управлять терминал *)
activate (* запустить или сделать терминал активным, если запущен *)
if (the (count of the window) = 0) or (the busy of window 1 = true) then (* если нет открытых окон или активное акно занято *)
tell application «System Events» (* передаем действие системным событиям *)
keystroke «n» using command down (* создать новое окно *)
end tell (* закончили передачу действия системным событиям *)
end if (* закончили проверку *)
do script «sudo kextunload /System/Library/Extensions/VoodooHDA.kext
» in window 1 (*в окне 1 выполнить команду перехода к папке из которой запустили рабочий процесс *)

end tell (* закончили обращение к терминалу *)
return input
end run

Вместо команды

do script «cd \»» & (POSIX path of (input as string)) & «\»»

я поставил

do script «sudo kextunload /System/Library/Extensions/VoodooHDA.kext

.
Первая команда делает переход в нужный каталог получая данные из вне, а мой вариант выгружает драйвер звука VoodooHDA. Как вы заметили тут еще присутствует вызов sudo, естественно терминал запросит пароль. Вот тут у меня и вышла загвоздка. Мне пришлось сначала сделать макрос, записать все своии действия через Automator .

rec.jpg

После этого мы получаем результат:

rec-result.jpg

Но этот вариант нам не совсем подходит. Тогда я взял и перетянул чась «Type» в верх:

Automator1.jpg

После этого мы получаем данный код:

on run {input, parameters}
delay 0.447988
set timeoutSeconds to 0.0
set uiScript to «keystroke \»
Бла Бла Бла, типа вводимый текст на запрос пароля
\»»
my doWithTimeout(uiScript, timeoutSeconds)
return input
end run

on doWithTimeout(uiScript, timeoutSeconds)
set endDate to (current date) + timeoutSeconds
repeat
try
run script «tell application \»System Events\»
» & uiScript & »
end tell»
exit repeat
on error errorMessage
if ((current date) > endDate) then
error «Can not » & uiScript
end if
end try
end repeat
end doWithTimeout

Тут конечно много мусора, профи это сделал бы проще, но у меня получилось так. Я просто избавился от перемещения курсора и визуального выбора окна программы Терминал. Ну а потом просто загрузил мне нужный драйвер и закрыл программу Терминал.

Из этого примера вы наверно быстро поймете как можно работать через Automator с Терминалом и многими другими программами. Хочу подчиркнуть, что это первая моя попытка что то сделать в Automator. Теперь я понял почему его так любят.




Лицензия от Creative Commons | Локализация от Тема: ВордПресс | Всего понемногу …