Запуск скрипта при входе в систему mac

215

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

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

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

  • 2
    Это не по теме ... Мне нужно было запустить мой демон Emacs;) Кстати, лучший ответ - ИМХО приложение Lingon X.
Теги:
terminal
login
osx-snow-leopard

3 ответа

284
Лучший ответ

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

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

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

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

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

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

С помощью решения для автоматизации вы можете делать следующее: Изображение 3901

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

  • 2
    @GregMiernicki LOL, доброе утро ...;) Почти год назад добавили РЕДАКТИРОВАТЬ к моему ответу, где это тоже сказано. Но это немного проще для обычных пользователей, поскольку создание файлов XML (plist) не очень удобно для многих пользователей. В любом случае - спасибо за комментарий. ;)
  • 4
    @GregMiernicki и не забывайте, с помощью решения Automator вы можете создавать ИНТЕРАКТИВНЫЕ сценарии входа в систему - например, сценарий, который попросит вас ввести некоторые данные (например, дополнительный пароль или что-то подобное). Мир не только черный или белый - по крайней мере, это как зебра ... :) :)
Показать ещё 5 комментариев
310

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

  • 4
    Да. Я нашел этот блог полезным по той же методике: developernotes.com/archive/2011/04/06/169.aspx
  • 8
    Вы не упомянули, что сомнительно в действиях Automator, и почему они «не рекомендуются».
Показать ещё 14 комментариев
34
  • Создайте свою оболочку 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
  • 1
    Я связал это, единственное, чего не хватает установщику командной строки;)
  • 1
    Хорошее решение. Как я могу скрыть окно входа? Я пытался пометить элементы входа в систему.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню