Um login sh session lê o usuário ~/.profile na invocação. Se a variável ENV estiver definida para um nome de arquivo depois disso, e se esse arquivo existir, o shell usará esse arquivo para inicializar ainda mais a sessão de login.
Os shells interativos que não são shells de login só usarão $ENV se ENV estiver definido, mas não lerá ~/.profile .
O shell não interativo não deve usar nenhum desses dois arquivos.
Normalmente, uma pessoa exporta ENV no final de seu ~/.profile :
ENV="$HOME/.shrc" # for example
export ENV # may be done as export ENV="..." too, in most shells.
Isto é, por exemplo, o que o bash faz se for invocado como sh ou com bash --posix .
Pode-se usar esses dois arquivos ( ~/.profile e $ENV ) para o que se deseja, mas o perfil é onde você pode definir e exportar variáveis de ambiente que precisam ser definidas apenas uma vez ( PATH etc. ), inicie qualquer processo fetchmail ou outro daemon de usuário que você deseja usar, etc., enquanto o arquivo $ENV é onde você configura itens específicos para esta sessão de shell / TTY, como a configuração GPG_TTY (se você está usando o GnuPG), configurando aliases (já que aliases não são herdados por subshells) etc.
O shell ksh93 usa ~/.profile e $ENV por padrão, mas interpreta $ENV de uma maneira específica. Se $ENV começar com /./ ou ././ , nenhum arquivo de configuração do sistema será usado (por exemplo, /etc/ksh.kshrc ).
O arquivo ~/.login não é usado por sh , a menos que ENV esteja definido para este nome de arquivo ou seja explicitamente proveniente de ~/.profile ou $ENV .