Por que eu não deveria fazer cada shell individual Eu executo um shell de login?

2

Várias pessoas me dizem que eu não deveria fazer cada shell. Eu uso um shell de login. Por meio de um TTY, ou um aplicativo terminal Xorg rodando bash .. alguém pode explicar o raciocínio potencial por trás dessa lógica, ou desmascará-lo para mim? Obrigado

    
por Man With No Name 08.07.2013 / 13:07

1 resposta

2

A primeira razão que vem à mente é que você deve, em geral, seguir as práticas aceitas. A maneira como um shell é chamado controla os arquivos de configuração que ele lê. De man bash :

   When  bash  is invoked as an interactive login shell,
   or  as  a  non-interactive  shell  with  the  --login
   option, it first reads and executes commands from the
   file /etc/profile, if that file exists.  After  read‐
   ing   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.  The --noprofile  option  may
   be  used  when  the  shell is started to inhibit this
   behavior.

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

e

   When  an  interactive shell that is not a login shell
   is started, bash reads  and  executes  commands  from
   /etc/bash.bashrc and ~/.bashrc, if these files exist.
   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
   /etc/bash.bashrc and ~/.bashrc.

A maioria das distribuições colocará aliases globais, variáveis e opções de shell em /etc/bash.bashrc , porque eles estão configurados para fazer a maioria dos shells interativos, não-login . Portanto, se você mudar para o uso de login , você perderá todas essas configurações. Isso poderia causar problemas no downstream se, por exemplo, certas variáveis globais não foram configuradas corretamente etc.

Além disso, a configuração padrão é para executar um shell de login quando você logar e não-login shells depois disso. Isso facilita a configuração de variáveis de ambiente ou trabalhos simples que devem ser executados uma vez nos arquivos de configuração do shell de login (por exemplo, ~/.profile ), A vantagem é que eles só serão executados uma vez, quando você efetuar login. em> all suas shells de login de shells, então esses comandos serão executados várias vezes, o que é i) não elegante e ii) pode retardar seu sistema se esses comandos forem intensivos em recursos.

Por fim, muitas vezes é necessário ter ambientes diferentes configurados se o usuário estiver efetuando login por meio do ssh, por exemplo, e se ela estiver fisicamente presente e abrindo um terminal. Ao fazer todos os seus shells, você perde a capacidade de fazer essa distinção.

Agora, não pode ser tão ruim assim, já que, se eu entendi corretamente, o aplicativo terminal da OSX inicia os shells de login por padrão. No entanto, o OSX foi projetado dessa forma, de modo que os possíveis problemas que mencionei foram presumivelmente resolvidos. Esse não será o caso se você modificar sua configuração do Linux para fazê-lo você mesmo.

    
por 08.07.2013 / 14:31