Вызов applescript из сценария оболочки с использованием прав администратора

Я запускаю сценарий оболочки, который запускает программу установки (от ViseX) и выбирает различные элементы в программе установки через список. Установщику нужны права администратора для правильной работы, но я не хочу использовать sudo. В настоящее время приложение установки не работает должным образом, потому что оно запускается без прав администратора.

Как мне вызвать яблочный скрипт с правами администратора или сообщить установочному приложению внутри яблочного скрипта, чтобы он запускался от имени администратора?

Вот яблочный скрипт, который я использую:

osascript <<-END
  tell application "$1"
    with timeout of 8 * 3600 seconds
     activate
     Select "$2"
     DoInstall
   end timeout
 end tell
END


person Nir    schedule 12.01.2011    source источник
comment
А какой у тебя вопрос? Это не работает? Если да, то как именно он терпит неудачу?   -  person Ned Deily    schedule 12.01.2011


Ответы (2)


Вы можете запускать сценарии оболочки из Applescript от имени администратора: см. это техническое примечание. Поэтому, если вы создадите этот яблочный скрипт как отдельный скрипт, вы можете его использовать. Некрасиво, но должно работать.

person Henno Brandsma    schedule 12.01.2011
comment
Итак, вы говорите, что из моего сценария оболочки я должен запустить сценарий Apple, который запускает сценарий оболочки, который дает возможность запускать другой сценарий Apple в качестве администратора? Действительно некрасиво. - person Nir; 12.01.2011
comment
Я пытался использовать этот метод, но у меня возникли проблемы с отправкой переменных в applescript из команды do shell script. Я все же предпочитаю использовать более простой способ. - person Nir; 12.01.2011

Вот applescript, который делает это. Я оставлю вас, чтобы превратить его в команду оболочки. Следующий сценарий открывает файл хоста на вашем компьютере с помощью TextEdit. Вы заметите, что для открытия этого файла требуются права администратора, поэтому это хороший пример. Обратите внимание, что я мог бы выполнить эту конкретную задачу проще, но я делаю это таким образом, чтобы показать вам, как запустить приложение с правами администратора, а затем настроить таргетинг на это приложение, чтобы вы могли выполнять другие команды AppleScript...

set theFile to "/private/etc/hosts"

-- launch the application with admin privileges and get the pid of it
set thePID to (do shell script "/Applications/TextEdit.app/Contents/MacOS/TextEdit > /dev/null 2>&1 & echo $!" with administrator privileges) as integer

-- get the bundle identifier of that pid so we can do something with the application
delay 0.2
tell application "System Events"
    set theProcess to first process whose unix id is thePID
    set bi to bundle identifier of theProcess
end tell

-- do something with it eg. open the hosts file
set theFileAlias to (POSIX file theFile) as alias
tell application id bi
    activate
    open theFileAlias
end tell
person regulus6633    schedule 12.01.2011
comment
Это сработало, но я столкнулся с некоторыми проблемами. Я использовал этот applescript для запуска сценария оболочки как внешнего файла через терминал — я заменил Notepad.app на Terminal.app. Проблема в том, что скрипт теперь работает как root. Это проблема, потому что я использую ~/sign в своем сценарии оболочки (запись файлов журнала на рабочий стол пользователя, например). Кроме того, установщик ViseX, который я запускаю из сценария, не работает с правами root. - person Nir; 25.01.2011
comment
Я не могу комментировать ViseX, но что касается необходимости входа на рабочий стол пользователя, просто получите имя пользователя, используя set userName для короткого имени пользователя (получить информацию о системе), затем укажите путь, а не используйте ~. Возможно, вам также придется изменить права доступа к файлу после записи журнала, чтобы пользователь мог его открыть. - person regulus6633; 26.01.2011
comment
Это может сработать, но самая большая проблема заключается в том, что установщик ViseX просто не будет работать с правами root. Я почти уверен, что ошибка связана с ViseX (одна из многих), и я не могу исправить ее самостоятельно. Я сообщу об ошибке, но вряд ли они когда-нибудь ее исправят. - person Nir; 27.01.2011
comment
Точно так же, как вы можете запустить что-то как root из учетной записи обычного пользователя, я уверен, что вы можете запустить что-то как обычный пользователь из учетной записи root. У меня нет этого ответа навскидку, но похоже, что это то, что вам нужно сделать, если ViseX требуется в процессе установки. Лучше всего было бы покончить с этим, если это возможно. - person regulus6633; 28.01.2011