У меня есть длинный и сложный bash-скрипт, который работает нормально, но я пытаюсь автоматизировать процесс развертывания, и на этом этапе я в замешательстве.

Я могу заставить скрипт работать как LaunchAgent без проблем, но, конечно, это происходит в фоновом режиме при загрузке. Поэтому у меня есть пауза в начале скрипта, где я могу нажать любую кнопку, если мне нужно прервать скрипт.

Проблема в том, что мне нужно открыть скрипт в окне терминала, чтобы я мог нажать кнопку, чтобы отменить или продолжить его. Здесь начинается моя проблема.

В скрипте много команд sudo. Я создал ниже .plist и я могу нормально загрузить его вручную. Работает и загружает скрипт, и все работает. Тем не менее, он ничего не делает при загрузке и просто выходит с кодом ошибки 1 в консоли.

Я пытался поместить его в /Library/LaunchAgents и /Library/LaunchDaemons . По сути, ему нужно открыть окно терминала от имени пользователя root, чтобы все команды в сценарии выполнялись от имени пользователя root без необходимости вручную вводить пароль.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.deecies.first</string>
<key>ProcessType</key>
<string>Interactive</string>
<key>ProgramArguments</key>
<array>
    <string>open</string>
    <string>-a</string>
    <string>terminal</string>
    <string>/Users/admin/first-boot.command</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

Я попытался указать /usr/bin/open и полный путь к Terminal.app , но безрезультатно. Я попытался сначала добавить строку sudo и /usr/bin/sudo но тоже ничего.

Мне удалось открыть окно терминала, когда оно было помещено в /Library/LaunchAgents , однако, по- видимому , оно не открывает ни терминал, ни сценарий от имени пользователя root, поскольку я получаю "разрешение запрещено" для всех пользователей. Команды в сценарии, которые требуют sudo.

1 ответ1

0

Вместо того, чтобы open Terminal , вы можете напрямую вызывать двоичный файл приложения (а не файл .app). Следующее должно работать для вашего запуска. Обратите внимание, что Терминал запустится, запустит скрипт и затем выйдет. В зависимости от ваших настроек Terminal.app, окно терминала может сразу исчезнуть или просто оставить на экране мертвое окно с выводом скрипта.

<array>
<string>/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal</string>
<string>/Users/admin/first-boot.command</string>
</array>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .