Мне интересно, сможет ли кто-нибудь помочь мне получить файл .sh для запуска при входе в мою учетную запись на моем компьютере. Я запускаю Mac OS X 10.6.7.
У меня есть файл "Example.sh", который я хочу запустить при входе на мой компьютер. У меня нет проблем с запуском, когда я уже вошел в систему, но я хочу, чтобы это запускалось автоматически.
Люди говорят добавить его в файл оболочки входа, но я не знаю, где это. Некоторые из них помогут.
Следить за этим:
Automator.app
Application
Show library
на панели инструментов (если скрыто)Run shell script
(из Actions/Utilities
) сохранить где-нибудь (например, вы можете сделать папку Applications
в вашем HOME, вы получите your_name.app
)
перейдите в System Preferences
→ Accounts
→ Login items
РЕДАКТИРОВАТЬ:
Недавно я получил значок "Хороший ответ" для этого ответа. Хотя моё решение простое и работает, самый простой способ запуска любой программы или сценария оболочки во время входа в систему описан в ответе @trisweb, если только вы не хотите интерактивности.
С помощью решения для автоматизации вы можете делать следующее:
Итак, запрос на запуск сценария или выход из приложения, запрос пароля, запуск других рабочих процессов автоматизатора во время входа в систему, условный запуск приложений во время входа в систему и так далее...
tl; dr: использовать собственный OSX для запуска процессов и менеджера, launchd
.
Для этого сделайте демон launchctl
. Вы будете иметь полный контроль над всеми аспектами сценария. Вы можете запустить один раз или остаться в живых как демон. В большинстве случаев это путь.
.plist
соответствии с инструкциями в документации Apple Dev здесь или более подробно ниже.~/Library/LaunchAgents
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 - это ваш единственный вариант, и, возможно, причина в том, что он существует.
Создайте свою оболочку 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