как запустить скрипт при входе в систему * nix?

<p>я знаю, что однажды знаю, как это сделать, но ... как вы запускаете скрипт (bash в порядке) при входе в unix?</p>

<p>от <a href="http://en.wikipedia.org/wiki/bash\_%28unix\_shell%29">википедия bash</a> </p><blockquote> <p>когда bash запускается, он выполняет команды в различных сценариях.</p> <p>когда bash вызывается как интерактивная оболочка входа в систему, он сначала читает и выполняет команды из файла/etc/profile, если этот файл существует. после прочтения этого файла он ищет ~/.bash\_profile, ~/.bash\_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.</p> <p>когда оболочка входа в систему закрывается, bash читает и выполняет команды из файла ~/.bash\_logout, если он существует.</p> <p>когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~/.bashrc, если этот файл существует. это может быть запрещено с помощью параметра --norc. опция --rcfile file заставит bash читать и выполнять команды из файла вместо ~/.bashrc.</p> </blockquote>

<p>при входе в систему большинство оболочек выполняет сценарий входа в систему, который можно использовать для выполнения собственного сценария. сценарий входа в систему, который выполняет shell, зависит, конечно, от shell:</p><ul> <li>bash: .bash\_profile, .bash\_login, .profile (для обратной совместимости)</li> <li>sh: .profile</li> <li>tcsh и csh: .login</li> <li>zsh: .zshrc</li> </ul><p>вероятно, вы можете узнать, какую оболочку вы используете</p><pre><code>echo $shell из подсказки.для более широкого определения 'login' полезно знать, что в большинстве дистрибутивов при запуске x ваш .xsessionrc будет выполняться при запуске вашего x-сеанса.

при использовании bash первый из ~/.bash_profile, ~/.bash_login и ~/.profile будет запущен для интерактивной оболочки входа в систему. я считаю, что ~/.profile обычно запускается оболочками unix, кроме bash. bash запустит ~/.bashrc для не входящей в систему интерактивной оболочки.я обычно помещаю все, что хочу всегда устанавливать в .bashrc, а затем запускаю его из .bash_profile, где я также настраиваю несколько вещей, которые должны запускаться только при входе в систему, например, настройку ssh-agent или запуск screen.

если вы хотите запустить один скрипт и только один скрипт, вы можете сделать так, чтобы пользователи по умолчанию использовали shell.echo "/usr/bin/uptime" >> /etc/shells vim /etc/passwd  username:x:uid:grp:message:homedir:/usr/bin/uptime может иметь интересные эффекты :) (хотя это небезопасно, так что не доверяйте ему слишком сильно. ничто не сравнится с тем, чтобы установить в командной консоли по умолчанию сценарий, который стирает диск. ... хотя, .. я могу представить себе сценарий, когда это может быть удивительно полезным)

я был разочарован этой проблемой в течение нескольких дней. ничего не работает на ubuntu. если я помещаю вызов в/etc/profile, все это падает при попытке входа в систему. я не мог использовать "startup applications", поскольку это было не то, что я хотел. это только устанавливает скрипт для этого текущего пользователя.наконец я нашел эту небольшую статью: <a href="http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html">http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html решение будет:  найдите путь $ xdg\_config\_dirs:</p> <p>echo $ xdg_config_dirs   поместите ваш скрипт в этот каталог  

поместите его в свой <a href="http://www.linuxfromscratch.org/blfs/view/stable/postlfs/profile.html">профиль bash :~/.bash_profile 

если вы используете osx, то это ~/.profile

launchd является предпочтительным способом в os x.если вы хотите, чтобы он запускался при входе в систему, укажите его в ~/library/launchagentsначать launchd пунктlaunchctl load /library/launchdaemons/com.bob.plist остановить элементlaunchctl unload /library/launchdaemons/com.bob.plist пример com.bob.plist<?xml version="1.0" encoding="utf-8"?> <!doctype plist public "-//apple//dtd plist 1.0//en" "http://www.apple.com/dtds/propertylist-1.0.dtd"> <plist version="1.0">  label <string>com.bob</string> runatload <true/> programarguments <array> <string>/usr/bin/java</string> <string>-jar</string> <string>/users/user/program.jar</string> </array>  </plist> 

найдите на справочной странице bash в локальной системе ^ invocation, чтобы узнать, какой файл будет прочитан при запуске.man bash /^invocation также в разделе файлы, ~/.bash_profile the personal initialization file, executed for login shells ~/.bashrc the individual per-interactive-shell startup file добавьте ваш скрипт в нужный файл. убедитесь, что сценарий находится в $ path, или используйте абсолютный путь к файлу сценария.</p>

<p>добавьте запись в <code>/etc/profile</code>, которая выполняет сценарий. это будет выполняться при каждом входе в систему. если вы делаете это только для своей учетной записи, используйте один из ваших сценариев входа (например, <code>.bash\_profile</code>), чтобы запустить его.</p>

<p>скрипт <code>~/.bash\_profile</code> запускается при входе в систему.</p>