Nano Hash - криптовалюты, майнинг, программирование

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

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

18.09.2008

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

Ответы:


1

Из Википедии Bash

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

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

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

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

18.09.2008
  • только с десятилетним опозданием, но: что, если для этой команды требуется sudo (например, для подключения общего сетевого ресурса из NAS в домашний каталог пользователя) 20.12.2018
  • @Mike'Pomax'Kamermans отличный вопрос, может быть, Sudo предполагается, поскольку он находится в системных файлах? 28.02.2019
  • может быть, а может и нет - надеюсь, кто-то все еще может ответить на это для нас =( 28.02.2019

  • 2

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

    • bash: .bash_profile, .bash_login, .profile (для обратной совместимости)
    • ш: .профиль
    • tcsh и csh: .логин
    • зш: .zshrc

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

    echo $SHELL
    

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

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

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

  • 3

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

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

    18.09.2008

    4

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

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

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

    18.09.2008

    5

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

    18.09.2008

    6

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

    ~/.bash_profile
    
    18.09.2008

    7

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

    8

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

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

    Решение будет:

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

      эхо $XDG_CONFIG_DIRS

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

    29.04.2015

    9

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

    18.09.2008

    10

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

    man bash
    /^INVOCATION
    

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

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

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

    19.09.2008

    11

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

    18.09.2008
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..