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

Я знаю, что когда-то знаю, как это сделать, но... как вы запускаете script (bash ОК) при входе в unix?

Ответ 1

Из wikipedia Bash

Когда запускается Bash, он выполняет команды в разных скрипты.

Когда Bash вызывается как интерактивный login, он сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и читает и выполняет команды с первого тот, который существует и доступен для чтения.

Когда оболочка входа завершается, Bash читает и выполняет команды из файла ~/.bash_logout, если он существует.

Когда интерактивная оболочка, которая не является запускается оболочка входа, Bash читает и выполняет команды из ~/.bashrc, если этот файл существует. Это может быть с помощью опции --norc. Параметр файла -rcfile принудительно Bash для чтения и выполнения команд из вместо ~/.bashrc.

Ответ 2

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

  • bash:.bash_profile,.bash_login,.profile (для обратной совместимости)
  • sh:.profile
  • tcsh и csh:.login
  • zsh:.zshrc

Вы можете, вероятно, узнать, какую оболочку вы используете, выполнив

echo $SHELL

из подсказки.

Для более широкого определения 'login' полезно знать, что в большинстве дистрибутивов, когда X запускается, ваш .xsessionrc будет выполняться при запуске X-сессии.

Ответ 3

При использовании Bash первая из ~/.bash_profile, ~/.bash_login и ~/.profile будет запущена для интерактивной оболочки входа. Я считаю, что ~/.profile обычно запускается оболочками Unix, кроме Bash. Bash будет запускать ~/.bashrc для интерактивной оболочки без входа.

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

Ответ 4

Если вы хотите запустить один script и только один script, вы можете сделать это, как полагают, по умолчанию.

echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd  
  * username:x:uid:grp:message:homedir:/usr/bin/uptime

может иметь интересные эффекты:) (его небезопасно, поэтому не доверяйте ему слишком много. Не похоже на то, что ваша оболочка по умолчанию должна быть script, которая стирает ваш диск... хотя, я могу представьте себе сценарий, где это может быть удивительно полезно)

Ответ 6

Если вы находитесь на OSX, то он ~/.profile

Ответ 7

Launchd является предпочтительным способом в OS X.

Если вы хотите, чтобы он запускался в вашем логине, поместите его в ~/Library/LaunchAgents

Начать Launchd item

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">
<dict>
<key>Label</key>
<string>com.bob</string>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Users/user/program.jar</string>
</array>
</dict>
</plist>

Ответ 8

Я был разочарован этой проблемой в течение нескольких дней. На ubuntu ничего не работало. Если я поместил вызов в /etc/profile, он все разбился при попытке входа в систему. Я не мог использовать "Приложения для запуска", поскольку это было не то, что я хотел. Это устанавливает только script для этого текущего пользователя.

Наконец, я нашел эту маленькую статью: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

Решение:

  • узнать путь $XDG_CONFIG_DIRS:

    echo $XDG_CONFIG_DIRS

  • поместите ваш script в этот каталог

Ответ 9

Добавьте запись в /etc/profile, которая выполняет script. Это будет выполняться во время каждого входа в систему. Если вы делаете это только для своей учетной записи, используйте один из своих сценариев входа (например, .bash_profile) для его запуска.

Ответ 10

Найдите свою локальную систему bash справочную страницу для ^ INVOCATION для получения информации о том, какой файл будет считаться при запуске.

man bash
/^INVOCATION

Также в разделе FILES

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Добавьте свой script в нужный файл. Убедитесь, что script находится в $PATH или использует абсолютный путь к файлу script.

Ответ 11

script ~/.bash_profile запускается при входе в систему.