В чем разница между «логином» и «интерактивной» оболочкой bash

50

В чем разница между «логином» и «интерактивной» оболочкой bash? Я цитировал Википедию ниже, но кто-нибудь может дать лучший ответ?

РЕДАКТИРОВАТЬ: Это вики сообщества, поэтому, возможно, вместо того, чтобы голосовать за закрытие, вы можете привести примеры ситуаций, требующих какого типа $ SHELL

Скрипты запуска

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

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

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

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

gyaresu
источник
Я отредактировал вопрос, чтобы он больше соответствовал наполовину проработанным правилам сайта. Не думаю, что когда-нибудь пойму желание удалить полезную информацию ...
Гарет
7
Почему люди голосуют за этот вопрос? Кажется совершенно законным для меня?
duffbeer703
2
Тьфу, убери ответ из своего вопроса и опубликуй его как ответ. Это нормально, чтобы ответить на свой вопрос.
Дероберт
2
Это очень актуальный вопрос, так как различие сбивает с толку. Например, обратите внимание, что когда вы входите в графическую среду через xdm и запускаете xterm, вы получаете интерактивную оболочку, а файлы запуска оболочки входа не запускаются.
pjc50

Ответы:

16

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

  • создайте временный файл, содержащий IP-адрес, с которого вы соединились, позже вы можете включить его в некоторые скрипты, задающие правила брандмауэра
  • запустите ssh-agent, запросите ваши ключи SSH и сохраните переменные среды агента SSH в файле.
  • если это ограниченный компьютер, и ваши коллеги хотят знать о входах друг друга, напишите (1) сообщения, информирующие их о вашем входе в систему.

В файлах оболочки без входа в систему ( .bashrc) вы должны настроить свою оболочку:

  • Необычная подсказка
  • установить псевдонимы
  • установить параметры истории
  • определить пользовательские функции оболочки
  • экспортировать переменные среды (может быть PAGER, EDITOR, если настройки всей системы не подходят)
  • загрузить переменные ssh-agent, сохраненные в .bash_profile

Обычно вы бы включили .bashrcиз .bash_profileследующего. Тогда оболочка входа получает все ваши настройки, и .bash_profileфайл не должен дублировать вещи, которые уже есть .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc
hayalci
источник
3
Является ли оболочка входа в систему первой, которая запускается, когда вы новичок на машине? Все остальные оболочки, которые вы открываете после этого, могут быть или не быть интерактивными. Оболочка, которая работает от cron? Не кажется интерактивным, но это логин? Что делать, если вы не на машине? Это те вопросы, которые остались без ответа
Франсуа Босолей
4
Теперь, это ответ, который я могу понять: linuxquestions.org/questions/linux-general-1/…
Франсуа Босолей