Uma diferença prática está no modo como o ambiente de shell resultante lê suas configurações iniciais.
/ usr / bin / login bifurca um shell de login. Eu acho que ele invoca o processo de autenticação, mas você pode não ver nenhuma interação de autenticação visível se você já estiver logado. E, claro, se o seu login shell não for bash, o login irá invocá-lo em vez de bash.
bash é um shell que sabe se foi chamado como um shell de login ou não. Um shell de login bash lê .bash_profile ou .bash_login ou .profile - apenas um, nessa ordem de preferência. Um shell não-login não lerá um .profile, mas lerá a partir de .bashrc. Este é um comportamento bash normal nas modernas plataformas * nix, mas pode ser difícil detectar comportamentos estranhos se você não entender o que está acontecendo.
Por exemplo, você pode abrir um shell de "login" via Terminal e obter um conjunto de variáveis ambientais (digamos, do seu .profile), digitar "bash" e obter um conjunto completamente diferente de variáveis (do. bashrc, mais quaisquer variáveis que foram exportadas, menos aquelas que não foram). Em particular, o PATH pode ser mutilado com entradas repetidas ou ausentes.