Запуск скрипта при входе в 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 демон. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.

  1. Создать .plist файл в соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже.
  2. Установить в ~/Library/LaunchAgents
  3. Войти (или запустить вручную через 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 - это ваш единственный вариант, и, вероятно, именно поэтому он и существует.

  1. Создайте свой сценарий оболочки как login.sh в вашей папке $HOME.

  2. Вставьте следующий однострочный скрипт в редактор скриптов:

    сделать скрипт оболочки "$HOME/login.sh"

  3. Затем сохраните его как приложение.

  4. Наконец добавьте приложение в ваши элементы входа.

Если вы хотите сделать вывод скрипта визуальным, вы можете поменять местами шаг 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
Другие вопросы по тегам