Запуск скрипта при входе в Mac
Мне интересно, сможет ли кто-нибудь помочь мне с запуском файла.sh при входе в свою учетную запись на моем компьютере. Я использую Mac OS X 10.6.7.
У меня есть файл "Example.sh", который я хочу запустить при входе на свой компьютер. У меня нет проблем с его запуском, когда я уже вошел в систему, но я хочу, чтобы он запускался автоматически.
Люди говорят, чтобы добавить его в файл оболочки входа в систему, но я не знаю, где это. Некоторая помощь, пожалуйста.
3 ответа
Вы можете:
- запустить Automator.app
- Выберите "Приложение"
- нажмите "Показать библиотеку" на панели инструментов (если скрыто)
- Добавьте "Run shell script" (из Действия / Утилиты)
- Скопируйте и вставьте ваш скрипт в окно
- Попробуй это
Сохраните где-нибудь, например, вы можете сделать папку "Приложения" в вашем HOME (вы получите your_name.app)
Обновление: для последней версии macOS назовите свой файл
your_name.command
вместоyour_name.app
Перейдите в Системные настройки -> Аккаунты -> Элементы входа
- Добавить это приложение
- проверить и готово;)
РЕДАКТИРОВАТЬ:
Недавно я получил значок "Хороший ответ" для этого ответа. Хотя мое решение простое и работает, самый простой способ запустить любую программу или скрипт оболочки во время входа в систему описан в ответе @trisweb, если только вы не хотите интерактивности.
С помощью автоматического решения вы можете сделать следующее:
Итак, запрос на запуск сценария или выход из приложения, запрос пароля, запуск других рабочих процессов автоматизатора во время входа в систему, условный запуск приложений во время входа в систему и так далее...
tl;dr: использовать встроенный в OSX модуль запуска и управления процессами, launchd
,
Для этого сделайте launchctl
демон. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.
- Создать
.plist
файл в соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже. - Установить в
~/Library/LaunchAgents
- Войти (или запустить вручную через
launchctl load [filename.plist]
)
Для больше на launchd
статья в википедии довольно хороша и описывает систему и ее преимущества перед другими старыми системами.
Вот конкретный файл plist для запуска скрипта при входе в систему.
Обновлен 2017/09/25 для OSX El Capitan и новее (кредит José Messias Jr):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Заменить <string>
после ключа программы с вашей желаемой командой.
Сохранить как ~/Library/LaunchAgents/com.user.loginscript.plist
Бежать launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
и выйти / войти, чтобы проверить (или проверить напрямую, запустите launchctl start com.user.loginscript
)
Хвост /var/log/system.log
для сообщений об ошибках.
Ключевым моментом является то, что это специфичная для пользователя запись запуска, поэтому она будет выполняться при входе в систему для данного пользователя. Системные демоны запуска (размещены в /Library/LaunchDaemons
) запускаются при загрузке.
Если вы хотите, чтобы сценарий запускался при входе в систему для всех пользователей, я считаю, что LoginHook - это ваш единственный вариант, и, вероятно, именно поэтому он и существует.
Создайте свой сценарий оболочки как
login.sh
в вашей папке $HOME.Вставьте следующий однострочный скрипт в редактор скриптов:
сделать скрипт оболочки "$HOME/login.sh"
Затем сохраните его как приложение.
Наконец добавьте приложение в ваши элементы входа.
Если вы хотите сделать вывод скрипта визуальным, вы можете поменять местами шаг 2 для этого:
tell application "Terminal"
activate
do script "$HOME/login.sh"
end tell
Если нужно несколько команд, можно использовать что-то вроде этого:
tell application "Terminal"
activate
do script "cd $HOME"
do script "./login.sh" in window 1
end tell