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

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

Какой логин? Вход в пользовательский интерфейс? как gnome, GTK, Unity? Возможно, новый вход в оболочку с tty? В чем разница между ними?

AlikElzin-kilaka 16.07.2012 18:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
71
1
160 473
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

Поместите его в свой профиль bash:

~/.bash_profile

Если у вас OSX, то это ~/.profile

Ответ принят как подходящий

От википедия Баш

When Bash starts, it executes the commands in a variety of different scripts.

When Bash is invoked as an interactive login shell, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.

When a login shell exits, Bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force Bash to read and execute commands from file instead of ~/.bashrc.

всего на десять лет позже, но: что, если для этой команды требуется sudo (например, установка общего сетевого ресурса с NAS в домашний каталог пользователя)

Mike 'Pomax' Kamermans 20.12.2018 01:01

@ Mike'Pomax'Kamermans отличный вопрос, может быть, предполагается, что Судо находится в системных файлах?

Webwoman 28.02.2019 15:52

может быть, а может и нет - надеюсь, кто-нибудь еще сможет ответить за нас = (

Mike 'Pomax' Kamermans 28.02.2019 18:59

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

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

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

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

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

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

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

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

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

echo $SHELL

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

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

echo $ 0 должен показать, какая оболочка используется, хотя иногда я видел сообщение «sh», когда на самом деле это «ksh» - думаю, на HP-UX или Solaris.

dr-jan 20.09.2008 03:22

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

man bash
/^INVOCATION

Также в разделе ФАЙЛЫ

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

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

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">
<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>

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

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

Решение было бы таким:

  1. узнать путь к $ XDG_CONFIG_DIRS:

    эхо $ XDG_CONFIG_DIRS

  2. поместите свой скрипт в этот каталог

Другие вопросы по теме