Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Системное Администрирование
  4. Bash | Shell
  5. Режимы bash - .bash_profile .bashrc

Режимы bash - .bash_profile .bashrc

Запланировано Прикреплена Закрыта Перенесена Bash | Shell
1 Сообщения 1 Постеры 13 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • MugiwaraM Не в сети
    MugiwaraM Не в сети
    Mugiwara
    написал отредактировано Aladdin
    #1

    Bash запускается в разных режимах — и от этого зависит какие файлы он читает при старте

    4 режима bash

    Login shell (интерактивный, с входом)

    Как запускается: SSH-сессия без команды, su - user, bash -l

    Читает по порядку:

    /etc/profile
      └── ~/.bash_profile  ← первый найденный из трёх:
      └── ~/.bash_login
      └── ~/.profile
    

    При выходе читает ~/.bash_logout.

    # Примеры:
    ssh user@server          # интерактивная ssh-сессия
    bash -l                  # явно запустить login shell
    su - admin               # переключиться с login
    

    Interactive shell (интерактивный, без входа)

    Как запускается: новое окно терминала, вкладка, просто набрать bash

    Читает:

    /etc/bash.bashrc  (на Debian/Ubuntu)
    ~/.bashrc
    
    # Примеры:
    bash                     # запустить дочерний bash
    xterm                    # открыть новый терминал
    tmux / screen            # новое окно
    

    Non-interactive, non-login ← самый частый источник проблем

    Как запускается: ssh user@host "команда", запуск скрипта через bash script.sh

    Читает: ничего

    # Примеры — ничего не работает:
    ssh user@host "pm2 restart app"   # PATH пустой
    bash deploy.sh                    # nvm/fnm недоступны
    cron jobs                         # тоже сюда
    

    Non-interactive login shell

    Как запускается: bash -lc "команда", ssh user@host bash -lc "..."

    Читает: ~/.bash_profile (и цепочку из п.1)

    # Примеры — работает если настроен bash_profile:
    ssh user@host 'bash -lc "pm2 restart app"'   # ✅
    bash -lc "node --version"                    # ✅
    

    Полная таблица

    Режим Пример запуска /etc/profile ~/.bash_profile ~/.bashrc
    Login interactive ssh user@host ✅ ✅ ❌
    Non-login interactive Открыть терминал ❌ ❌ ✅
    Non-interactive non-login ssh user@host "cmd" ❌ ❌ ❌
    Non-interactive login bash -lc "cmd" ✅ ✅ ❌

    Типичная схема настройки

    Именно поэтому рекомендуют делать так:

    ~/.bash_profile
      └── source ~/.bashrc   ← подтягивает всё из bashrc в login-сессии
    

    Тогда и интерактивные терминалы (~/.bashrc), и SSH-деплой через bash -lc (~/.bash_profile) видят одно и то же окружение.


    Порядок чтения ~/.bash_profile — важный нюанс

    Bash ищет первый существующий файл из трёх и читает только его:

    1. ~/.bash_profile   ← если есть — читается, остальные игнорируются
    2. ~/.bash_login     ← если нет bash_profile
    3. ~/.profile        ← если нет двух предыдущих
    

    На Ubuntu ~/.bash_profile обычно отсутствует → читается ~/.profile. На macOS — есть ~/.bash_profile.


    Применительно к деплою

    # ❌ Не работает — режим 3, читает ничего
    ssh "$SERVER" "pm2 restart app"
    
    # ✅ Работает — режим 4, читает ~/.bash_profile
    ssh "$SERVER" 'bash -lc "pm2 restart app"'
    
    # ✅ Работает — если настроил ~/.bash_profile → source ~/.bashrc
    # и в ~/.bashrc прописан fnm/nvm
    
    1 ответ Последний ответ
    😻
    2

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

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

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы