Qual é a diferença entre um shell bash de 'Login' e um 'Interactive'


50

Qual é a diferença entre um shell de bash 'Login' e um 'Interactive'? Citei a Wikipedia abaixo, mas alguém pode dar uma resposta melhor?

EDIT: Este é um wiki da comunidade. Talvez, em vez de votar para fechar, você possa fornecer exemplos de quais situações exigem qual tipo de $ SHELL

Scripts de inicialização

Quando o Bash é iniciado, ele executa os comandos em uma variedade de scripts diferentes.

Quando o Bash é chamado como um shell de login interativo, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.

Quando um shell de login sai, o Bash lê e executa comandos do arquivo ~ / .bash_logout, se existir.

Quando um shell interativo que não é um shell de login é iniciado, o Bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir. Isso pode ser inibido usando a opção --norc. A opção --rcfile file forçará o Bash a ler e executar comandos do arquivo em vez de ~ / .bashrc.


Editei a pergunta para se encaixar mais nas regras do site que foram lançadas pela metade. Eu não acho que eu nunca vou entender o desejo de excluir informações úteis ...
Gareth

7
Por que as pessoas estão votando nesta questão? Parece perfeitamente legítimo para mim?
Duffbeer703 16/05/09

2
Ugh, tire a resposta da sua pergunta e poste-a como resposta. Não há problema em responder sua própria pergunta.
Derobert 16/05/2009

2
É uma pergunta muito válida, pois a distinção é confusa. Observe, por exemplo, que quando você faz login em um ambiente gráfico via xdm e executa o xterm, obtém um shell interativo e os arquivos de inicialização do shell de login não são executados.
Pjc50 02/02

Respostas:


16

Nos arquivos de perfil do seu shell de login, você pode configurar algumas coisas que você usará durante a sessão e que precisam ser feitas apenas uma vez. Algumas ideias:

  • crie um arquivo temporário contendo o endereço IP do qual você se conectou; posteriormente, você pode incluí-lo em alguns scripts que definem regras de firewall.
  • execute ssh-agent, solicite suas chaves SSH e armazene as variáveis ​​de ambiente do agente SSH em um arquivo.
  • se essa é uma máquina limitada e seus colegas de trabalho desejam conhecer os logins uns dos outros, escreva (1) mensagens informando sobre seu login.

Nos arquivos de um shell que não é de login ( .bashrc), você deve configurar seu shell:

  • Prompt extravagante
  • definir aliases
  • definir opções de histórico
  • definir funções personalizadas do shell
  • exportar variáveis ​​de ambiente (talvez PAGER, EDITOR se as configurações do sistema forem ruins)
  • carregar variáveis ​​de agente ssh salvas em .bash_profile

Normalmente, você incluiria .bashrca partir .bash_profilecom o seguinte. Então shell de login obtém todas as suas personalizações e .bash_profilearquivo não tem que coisas duplicados que já são .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc

3
O shell de login é o primeiro a ser iniciado quando você está na máquina? Todos os outros shells que você abrir depois disso podem ou não ser interativos. Um shell que está sendo executado no cron? Não parece interativo, mas é o login? E se você não estiver na máquina? Essas são as perguntas que ficaram sem resposta
François Beausoleil

4
Agora, isso é uma resposta que posso entender: linuxquestions.org/questions/linux-general-1/...
François Beausoleil
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.