모든 쉘에서 읽은“.bashrc”파일이 있습니까?


105

인가 ~/.bashrc 에 사용자 특정 환경 변수, 별칭, 수정을 지정하는 유일한 장소 PATH등, 변수는?

나는 그것이 유일한 ~/.bashrc것으로 bash보이지만 다른 껍질도 존재 하기 때문에 묻습니다 ...

답변:


94

이 파일 $HOME/.profile은 bash, sh, dash 및 기타를 포함하여 여러 쉘에서 사용됩니다.

bash 매뉴얼 페이지에서 :

bash가 대화식 로그인 쉘로 호출되면 ... 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾아서 존재하고 읽을 수있는 첫 번째 명령을 읽고 실행합니다.

csh와 tcsh는 명시 적으로 보지 ~/.profile않지만 그 쉘은 다소 구식입니다.


7
Zsh는 기본적으로 .profile을 읽지 않습니다. 그렇기 때문에 이전 답변을 삭제했습니다. Zsh는 sh라는 기호 링크로 호출 될 때만 .profile을 읽습니다.
fschmitt

10
tcsh는 일부 환경에서 여전히 인기가 있습니다.
Maciej Piechotka

1
fschmitt : 수정 해 주셔서 감사합니다. 결정된. Maciej Piechotka : 그건 사실입니다. 그러나 실행중인 쉘을 기반으로 특정 다른 rc 스크립트를 가져 오는 * rc 스크립트를 만들 수도 있습니다 (복잡하지만).
msw

1
이러한 방식으로 작동하려면 사용자는 각 쉘이 로그인 쉘인지 확인해야합니다. 예를 들어, Gnome Terminal에서 Profile-> Title and Command로 이동하여 활성화하십시오 Run command as a login shell. 또한 제거 ~/.bash_profile하거나 소스로 만들어야합니다 ~/.profile.
Mikel

@fschmitt $HOME/.profileZsh 내부 에서도 소스 를 사용할 수 있습니다 .zshrc. 나는 모든 휴대용 쉘 물건을 넣는 경향이 있으며 .profile내가 홉 할 수있는 모든 환경에서 공유 할 수 있습니다.
Benjamin R

56

~/.profile환경 변수 정의에 대한 당신이 로그인 할 때 실행하려는 그래픽이 아닌 프로그램에 적합한 곳입니다 (예를 들어 ssh-agent, screen -m). Bourne 스타일 쉘 (sh, ksh, bash) 인 경우 로그인 쉘에 의해 실행됩니다. ~/.zprofile대신 Zsh가 실행 되고 Csh 및 tcsh run이 실행 ~/.login됩니다.

X 디스플레이 관리자 (xdm, gdm, kdm, ...)에서 ~/.profile로그인하는 경우 배포 여부 에 따라 디스플레이 관리자 및 데스크톱 환경이 구성된 방식에 따라 실행 여부 가 달라집니다. “맞춤 세션”으로 로그인하면 보통 실행 ~/.xsession됩니다.

~/.bashrc별명, 함수, 쉘 옵션 및 프롬프트와 같은 bash 특정 설정에 적합한 위치입니다. 이름에서 알 수 있듯이 bash에만 적용됩니다. csh has ~/.cshrc, ksh has ~/.kshrc및 zsh에는 <drumroll>이 ~/.zshrc있습니다.

참조 :
.bashrc에 사이 .bash_profile에 차이
어떤 설정 파일이 떠들썩한 파티와 환경 변수를 설정하는 데 사용되어야 하는가?
Zsh가 ~ / .profile을 누르지 않음


잊지 마세요 zsh을 또한 가지고 .zlogin뿐만 아니라 .zprofile실행되는 .zshrc (만 로그인 쉘의 경우).
ZSH

21

공통 파일은 없지만 모든 쉘을 공통 파일에서 읽을 수 있습니다.

  1. bash에서 읽 .bash_profile거나.bashrc
  2. zsh에서 읽기 .zprofile .zshrc
  3. ksh에서 읽 .profile거나$ENV

여기 내가하는 일이 있습니다.

~/.env

# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin

~/.shrc

test -f "$HOME/.env" && . "$HOME/.env"

# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs

~/.bashrc

test -f ~/.shrc && source ~/.shrc

# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes

~/.zshenv

# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit

~/.zshrc

test -f ~/.shrc && source ~/.shrc

# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof

~/.profile

# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
    test -f "$HOME"/.env && . "$HOME"/.env
fi

# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc

# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon

~/.bash_profile

source ~/.bashrc
source ~/.profile

~/.zlogin

# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile

~/.zprofile

(empty)

시스템에 대한 루트 액세스 권한이있는 경우 다른 방법은을 설정하는 것 pam_env입니다.

당신은 넣을 수 있습니다

session optional pam_env.so user_envfile=.env

관련 /etc/pam.d파일 (예 : /etc/pam.d/common-session데비안)에 로그인 한 다음 사용자가 로그인하면에서 PAM환경 변수를 읽습니다 ~/.env.

참고 pam_env기본적으로 만 지원 VAR=value항목을.

더 많은 정보:


14

쉘마다 환경이 정의되어 있기 때문에 다른 쉘에 대한 환경 구성 파일과 같은 것은 없습니다.

csh에서는 setenvbash에서 사용 export하여 정의합니다.

어쨌든 자신의 구성 파일을 작성하여 source쉘의 도트 파일에 포함시킬 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.