Em um sistema moderno, não é especialmente comum encontrar os casos em que isso é importante, mas acontece. (Em particular, se você usar operações shell em %code% , como %code% ou o formulário %code% em linha.)
%bl0ck_qu0te%
Você coloca coisas em %code% que não seriam herdadas automaticamente pelas sub-unidades; Isso significa aliases e funções, principalmente, embora às vezes você tenha configurações de variáveis que você não deseja visíveis fora do shell (isso é muito raro). Pode-se argumentar que esses devem ser exportados de alguma forma, mas várias tentativas experimentais se depararam com problemas de compatibilidade com a tentativa de escondê-las dentro do ambiente e foram praticamente abandonadas.
%bl0ck_qu0te%
Você coloca as configurações de ambiente em %code% para que recebam configurações iniciais sãs. Às vezes você vai querer anular estes (muitas vezes isso é feito por ambientes complexos, como Matlab ou Cadence); Se você colocar as configurações de ambiente em %code% , as camadas executadas nesses ambientes perderão as personalizações dos ambientes, e as coisas podem não funcionar adequadamente como resultado. Isso também se aplica se você usar um pacote como os módulos , virtualenv , rvm , etc. para gerenciar múltiplos ambientes de desenvolvimento; colocar suas configurações em %code% significa que você não pode executar o ambiente que deseja no seu editor, mas será forçado a entrar no padrão do sistema.
%bl0ck_qu0te%
Isso está correto; você normalmente quer que o shell inicial seja um shell de login e quaisquer shells iniciados sob esse não sejam shells de login. Se o shell inicial não for um shell de login, você não terá um %code% padrão ou várias outras configurações (incluindo seu exemplo %code% ).
A maioria dos ambientes de desktop iniciados a partir de gerenciadores de exibição (ou seja, a grande maioria dos logins gráficos) não configuram um ambiente de login para toda a área de trabalho, então você é forçado a executar o shell inicial em terminais como um shell de login . Isso causa vários problemas (notadamente que o %code% e os disponíveis para programas executados, por exemplo, painéis, não estão configurados corretamente, porque o painel não é um terminal e não executou %code% ), mas é um compromisso razoável dado que nem sempre é possível executar %code% no ambiente não interativo no início de uma sessão iniciada por um gerenciador de exibição, dependendo de seu conteúdo. Às vezes é sugerido colocar configurações de ambiente em %code% em vez de configurar um shell de login; como discutido acima, isso funciona desde que você não precise sobrescrever esse ambiente e causar quebras estranhas assim que fizer precisar fazer isso.
Recentemente, ajudei a diagnosticar um problema como esse no OS X, no qual um usuário que colocara as configurações em %code% depois começou a usar %code% e perlbrew viu um comportamento estranho, porque os ambientes configurados pelos dois foram "desfeitos" por %code% dentro dos editores e %code% (que no OS X, diferente do Linux, propaga o %code% do usuário para que %code% seja executado pelo shell de root). Antes de tentar usar esses ambientes, não havia problema; ao começar a usá-los, ficaram perplexos com a perda inesperada de suas configurações.
______ azszpr409190 ___
para ser honesto, há pouca diferença hoje em dia, apesar do que o guru tinha a dizer.
a questão por trás disso é que hoje em dia nós fazemos login graficamente, e não através de um shell de login. no passado, nós unix usuários gostam de ver um relatório curto do que está acontecendo em um servidor imediatamente após o login - então vamos iniciar o X por linha de comando - este relatório geralmente requer algum tempo para gerar (por exemplo, 10-20 segundos). e depois não queremos ver o mesmo quando começamos, e. xterm. assim a diferença.
hoje em dia eu não acho que a distinção seja importante agora. Eu acho que estes dias se você fonte bashrc em bash_profile ninguém poderia culpá-lo.
observe que isso não se aplica ao macos x (cada terminal.app iniciado é um shell de login)
______ azszpr1003123 ___
Bem, sobre "Logins Gráficos", depende de qual * DM você usa ...
Com o GDM (Gnome 3.18) eu tenho isto:
/ etc / gdm / Xsession
%pre%
Então, ~ / .profile é originado no login usando / bin / sh e não / bin / bash
Existem dois casos
-
/ bin / sh está vinculado a / bin / bash , mas é executado no modo "POSIX / Bourne"
-
/ bin / sh é / bin / traço (debian / ubuntu). Mais rápido, mas com menos recursos (suporte ao ShellShock;) )
Assim, o perfil / bin / sh é ~ / .profile e não ~ / .bash_profile, ~ / .zprofile
Este arquivo deve ser usado para configurações "agnóstico do shell" , como variáveis de caminho e ambiente.
NÃO programa executável para interação do usuário somente para login deve ser, mas aqui
(cheque, fortuna, etc ...)
o ~ /.* rc é destinado apenas para sessões "interativas" (apelidos, por exemplo ...)
Existe uma diferença entre o bash e o zsh para shells interativos login
fontes bash somente .bash_profile, enquanto fontes zsh na ordem:
- ~ / .zprofile
- ~ / .zshrc
- ~ / zlogin (os aliases definidos em ~ / .zshrc estão disponíveis, no caso de shells "interativos" + "login"
A maneira certa de fazer ~ / .bash_profile foi respondida aqui:
Diferença entre .bashrc e .bash_profile
%pre%
Para ativar o teste (e a criação de perfil), você pode usar isso
~ / .bash_profile:
%pre%
~ / .zprofile:
%pre%
então, para testar:
%pre%
Então, o RVM / virtualenv deve ir em ~ / .profile, IMHO
Mas isso NÃO FUNCIONA , às vezes ...
Por exemplo, virualenvwrapper funciona somente se o shell
rodando Xsession é um bash "original" (exportando BASH_VERSION)
Se você estiver em um sistema dash , a variável de ambiente e a configuração de caminho funcionarão, mas a definição da função virualenvwrapper não funcionará porque o script não é compatível com POSIX.
O script não apresenta nenhum erro, mas termina sem nenhuma definição "workon" .
Assim, você pode definir o ambiente disponível em ~ / .profile , apenas para ativar a execução correta do python a partir do cliente iniciado diretamente do X:
%pre%
link
link
Mas para virualenvwrapper você tem duas alternativas:
- coloque-o em ~ / .bash_profile ou ~ / .zprofile (ou ~ / .zlogin) quando o terminal atua como shell de login
- inclua o script em ~ / .bashrc ou ~ / zshrc
Isso significa que os clientes X (emacs, por exemplo) devem ser iniciados a partir do terminal e não do gráfico!
"Não tenho satisfação ..."
___