Запуск script при регистрации mac

Мне интересно, сможет ли кто-нибудь помочь мне получить файл .sh для запуска при входе в мою учетную запись на моем компьютере. Я запускаю Mac OS X 10.6.7.

У меня есть файл "Example.sh", который я хочу запустить при входе на мой компьютер. У меня нет проблем с запуском, когда я уже вошел в систему, но я хочу, чтобы это запускалось автоматически.

Люди говорят добавить его в файл оболочки входа, но я не знаю, где это. Некоторые из них помогут.

Ответ 1

Следить за этим:

  • запустить Automator.app
  • выберите Application
  • нажмите Show library на панели инструментов (если скрыто)
  • добавить Run shell script (из Actions/Utilities)
  • скопируйте и вставьте ваш скрипт в окно
  • Попробуй это
  • сохранить где-нибудь (например, вы можете сделать папку Applications в вашем HOME, вы получите your_name.app)

  • перейдите в System PreferencesAccountsLogin items

  • добавить это приложение
  • проверить и готово;)

РЕДАКТИРОВАТЬ:

Недавно я получил значок "Хороший ответ" для этого ответа. Хотя моё решение простое и работает, самый простой способ запуска любой программы или сценария оболочки во время входа в систему описан в ответе @trisweb, если только вы не хотите интерактивности.

С помощью решения для автоматизации вы можете делать следующее: automator screenshot login application

Итак, запрос на запуск сценария или выход из приложения, запрос пароля, запуск других рабочих процессов автоматизатора во время входа в систему, условный запуск приложений во время входа в систему и так далее...

Ответ 2

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 и новее (кредит Хосе Мессиасу-младшему):

<?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> после клавиши Program на желаемую команду.

Сохранить как ~/Library/LaunchAgents/com.user.loginscript.plist

Запустите launchctl load ~/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 - это ваш единственный вариант, и, возможно, причина в том, что он существует.

Ответ 3

  • Создайте свою оболочку script как login.sh в папке $HOME.

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

    do shell script "$ HOME/login.sh"

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

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

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