.bash_profile과 .bash_login의 차이점은 무엇입니까?

.bash_profile과 .bash_login의 차이점은 무엇입니까?

나는 bash가 어떻게 작동하는지 연구해왔고 지금까지 다음을 배웠습니다.

로그인 쉘이 시작되면 아래에 존재하는 첫 번째 파일이 실행됩니다.

~/.bash_profile, ~/.bash_login,~/.profile

이 파일은 로그인이 아닌 대화형 셸(또는 하위 셸)이 시작될 때 ~/.bashrc실행됩니다 .

또한 .profile은 sh와 같은 다른 쉘에서도 실행될 수 있습니다. 이제 내 질문은 .bash_profile과 .bash_login을 갖는 이유가 무엇입니까? 둘 다 동일한 기능을 수행하며 .profile과 달리 .bash_profile과 .bash_login은 모두 bash에서만 읽을 수 있습니다. 내가 아는 유일한 차이점은 .bash_profile이 존재하지 않으면 .bash_login이 실행된다는 것입니다. 그렇다면 왜 거기에 있습니까?

답변1

쉘은 로그인 쉘의 시작 파일 역할 을 하는 쉘에 많은 영향을 미치는 다른 쉘 과 마찬가지로 로그인 쉘이 시작될 때 실행되는 쉘 시작 파일의 이름 역할 을 하는 일부 기능을 가져 csh옵니다 .bash.loginkshbash.profile

그러므로 .bash_profile그 이름은 쉘의 파일에서 빌려온 것이고, 그 이름은 쉘의 파일에서 빌려온 것입니다.ksh.profile.bash_logincsh.login

사용자는 마이그레이션할 다른 셸 계열( 셸 유사 또는 셸 유사) 을 사용 .bash_profile하거나 의존합니다 ..bash_loginkshcshbash

분명히 요즘 많은 Linux 사용자는 Linux 이외의 쉘을 사용한 적이 없으므로 bash그들이 사용하는 파일 이름은 시스템 관리자, 교사 선호도 또는 임의성에 따라 달라질 수 있습니다.

및 둘 다 ~/.bash_profile존재하는 경우 ~/.bash_login파일은 ~/.bash_login무시됩니다.

답변2

선택적 스크립트 이름을 사용하면 얻을 수 있는 이점 중 하나~/.bash_login,대신에~/.profile, 로그아웃 스크립트에 병렬 이름이 있습니까?~/.bash_logout, 사용하기로 결정한 경우.

따라서 Bourne이 아닌 Bash를 실행하는 경우 이름 집합 구성의 복잡성이 단순화됩니다.

/etc/profile         # system login       script
~/.bash_profile      # user   login       script
~/.bash_logout       # user   logout      script

/etc/bash.bashrc     # system interactive script
       ~/.bashrc     # user   interactive script

이와 관련하여:

/etc/profile         # system login       script
~/.bash_login        # user   login       script  <--sisters +
~/.bash_logout       # user   logout      script  <----------+

/etc/bash.bashrc     # system interactive script
       ~/.bashrc     # user   interactive script

그러나 로그아웃 스크립트를 사용할 계획이 없다면 다른 방법이 더 간단할 수도 있습니다.

   /etc/profile      # system login       script
~/.bash_profile      # user   login       script

/etc/bash.bashrc     # system interactive script
       ~/.bashrc     # user   interactive script

안타깝게도 구성 이름에 더 이상 이름 대칭이 없습니다...

하지만 다음 심볼릭 링크를 사용하면 이를 더 효과적으로 만들 수 있습니다.

/etc/bash   -->    /etc/profile   # system login       script
  ~/.bash   --> ~/.bash_profile   # user   login       script

/etc/bashrc --> /etc/bash.bashrc  # system interactive script
  ~/.bashrc                       # user   interactive script

비파괴적으로 생성:

sudo ln -sT    /etc/profile  /etc/bash
     ln -sT ~/.bash_profile    ~/.bash

sudo ln -sT /etc/bash.bashrc /etc/bashrc
#                              ~/.bashrc  (don't change)

또는파일을 새 이름으로 옮긴 다음 백링크하여 이를 보다 적극적으로 되돌릴 수 있습니다.

sudo mv -f    /etc/profile       /etc/bash          && \
sudo ln -sT   /etc/bash          /etc/profile

sudo mv -f    /etc/bash.bashrc   /etc/bashrc        && \
sudo ln -sT   /etc/bashrc        /etc/bash.bashrc

     mv -f    ~/.bash_profile    ~/.bash            && \
     ln -sT   ~/.bash            ~/.bash_profile

#             ~/.bashrc              (don't change)

어쨌든, 이제 더욱 통합된 프로필 이름을 갖게 되었습니다., 링크에서 잊어버렸을 때 쉽게 찾을 수 있습니다.

/etc/bash    # system login       config script
  ~/.bash    # user   login       config script

/etc/bashrc  # system interactive config script
  ~/.bashrc  # user   interactive config script

(저는 로그아웃 스크립트를 사용하지 않지만 이름은 다음과 같습니다: /etc/bash.logout.)

관련 정보