태그 보관물: .bash-profile

.bash-profile

bash_profile 또는 bashrc의 환경 변수? 있습니다. 가장 많이 투표 된

이 질문을 발견했습니다. [블로그] : .bashrc와 .bash_profile의 차이점은 매우 유용하지만 가장 투표가 많은 답변을 본 후에 (나는 아주 좋은) 추가 질문이 있습니다. 가장 많이 투표 된 정답의 끝으로 나는 다음과 같이 진술을 봅니다.

여기에 환경 변수 정의를 ~ / .bashrc에 넣거나 터미널에서 항상 로그인 쉘을 시작하기위한 권장 사항이 표시 될 수 있습니다. 둘 다 나쁜 생각입니다.

  1. 왜 나쁜 생각입니까 (나는 싸우려고하지 않고 단지 이해하고 싶습니다)?

  2. 환경 변수를 설정하고 PATH (예 : JAVA_HOME)에 변수를 추가하여 내보내기 항목을 넣는 것이 가장 좋은 위치에 있습니까? 에 ~ / .bash_profile에 또는 ~ / .bashrc에 ?

  3. 질문 번호 2에 대한 답변이 ~ / .bash_profile 인 경우 두 가지 질문이 더 있습니다.

    3.1. ~ / .bashrc 아래에 무엇을 넣으 시겠습니까? 별명 만?

    3.2. 비 로그인 쉘에서 ~ / .bash_profile 이 “선택되지 않음” 이라고 생각합니다 . JAVA_HOME 항목 내보내기가 bash_profile에있는 경우 javac & java 명령 을 실행할 수 있습니까? PATH에서 찾을 수 있습니까? 이것이 일부 게시물과 포럼이 JAVA_HOME 및 ~ / .bashrc 설정을 제안하는 이유 입니까?

    미리 감사드립니다.



답변

현대 시스템에서는 중요한 경우에 특히 흔하지는 않지만 발생합니다. (특히, 인라인 형태 vim와 같은 쉘 조작을 사용하는 경우 ):r !command!<motion>command

~ / .bashrc 아래에 무엇을 넣으시겠습니까? 별명 만?

~/.bashrc서브 쉘이 자동으로 상속하지 않는 것을 넣습니다 . 이것은 종종 별칭과 함수를 의미하지만, 때로는 쉘 외부에서 보이지 않기를 원하는 변수 설정이 있습니다 (매우 드 rare니다). 어쨌든 그것들을 내 보내야한다고 주장 할 수는 있지만 다양한 실험 시도가 환경 내에서 숨기려고 할 때 호환성 문제가 발생하여 대부분 포기되었습니다.

환경 변수를 설정하고 PATH (예 : JAVA_HOME)에 변수를 추가하여 내보내기 항목을 넣는 것이 가장 좋은 위치에 있습니까? ~ / .bash_profile 또는 ~ / .bashrc에 있습니까?

환경 설정을 ~/.bash_profile초기 설정으로 지정합니다. 때로는이를 재정의하기를 원할 수도 있습니다 (종종 Matlab 또는 Cadence와 같은 복잡한 환경에서 수행됨). 환경 설정을 입력하면 ~/.bashrc해당 환경 내에서 실행되는 셸은 환경의 사용자 정의를 잃어 버리고 결과적으로 제대로 작동하지 않을 수 있습니다. 이는 모듈 , virtualenv , rvm 등과 같은 패키지를 사용하여 여러 개발 환경을 관리 하는 경우에도 적용됩니다 . 설정을 지정 ~/.bashrc하면 편집기 내에서 원하는 환경을 실행할 수 없지만 대신 시스템 기본값으로 설정됩니다.

비 로그인 쉘에서 ~ / .bash_profile이 “선택되지 않음”이라고 생각합니다.

이것은 맞습니다. 당신은 일반적으로 초기 쉘은 로그인 쉘과에 하나에서 시작 어떤 조개되고 싶어 하지 로그인 할 수 포탄입니다. 초기 셸이 로그인 셸이 아닌 경우 기본 PATH또는 다양한 다른 설정 ( JAVA_HOME예 : 포함 )이 없습니다.

디스플레이 관리자 (대부분의 그래픽 로그인)에서 시작된 대부분의 데스크탑 환경은 전체 데스크탑에 대한 로그인 환경을 설정하지 않으므로 터미널에서 초기 쉘을 로그인 쉘로 실행해야합니다. 이로 인해 여러 가지 문제가 발생합니다 ( PATH예 : 패널에서 실행되는 프로그램에서 사용할 수있는 프로그램 등은 패널이 터미널이 아니고 실행되지 않았기 때문에 올바르게 설정되지 않은 경우 ~/.bash_profile). 그러나 항상 가능한 것은 아니라는 점에서 합리적인 타협입니다. ~/.bash_profile내용에 따라 디스플레이 관리자가 시작한 세션이 시작될 때 비 대화식 환경에서 제대로 실행 됩니다. 때때로 환경 설정을하는 것이 좋습니다~/.bashrc대신 로그인 쉘을 구성하는 대신; 상술 한 바와 같이,만큼이 작품 당신은 환경을 재정의 할 필요가 없기 때문에, 당신은 한 번 이상한 파손을 야기 그렇게 할 필요가 있습니다.

나는 최근에 OS X에서 이와 같은 문제를 진단하는 데 도움을주었습니다. ~/.bashrc나중에 설정을 한 사용자가 나중에 perlbrew를 사용하기 시작 rvm하고 이상한 행동을 보았습니다. 두 사람에 의해 설정된 환경은 내부 편집자에 의해 “실행 취소”되었기 때문에 (OS X에서) Linux와 달리 사용자가 루트 셸에서 실행 되도록 전파합니다 . 이러한 환경을 사용하기 전에 아무런 문제가 없었습니다. 그것들을 사용하기 시작했을 때, 그들은 예기치 않은 설정 손실로 인해 어리둥절했습니다.~/.bashrcsudo$HOME~/.bashrc


답변

솔직히 말해서, 전문가의 말에도 불구하고 요즘에는 거의 차이가 없습니다.

이 문제는 요즘 로그인 쉘이 아닌 그래픽으로 로그인한다는 것입니다. 과거에는 유닉스 사용자들이 로그인 직후 서버에서 무슨 일이 일어나고 있는지에 대한 짧은 보고서를보고 싶었습니다. 명령 행으로 X를 시작합니다.이 보고서는 종종 생성하는 데 약간의 시간이 걸립니다 (예 : 10-20 초). 그리고 xterm을 시작할 때 같은 것을보고 싶지 않습니다. 따라서 차이.

요즘 나는 구별이 중요하지 않다고 생각합니다. 요즘 bash_profile에서 bashrc를 소스하면 아무도 당신을 비난 할 수 없다고 생각합니다.

이것은 macos x에는 적용되지 않습니다 (시작된 모든 terminal.app는 로그인 쉘임)


답변

“그래픽 로그인”에 대해서는 사용하는 * DM에 따라 다릅니다.

GDM (Gnome 3.18)으로 나는 이것을 가지고있다 :

/ etc / gdm / Xsession

#!/bin/sh   <= *important*

...

# First read /etc/profile and .profile
test -f /etc/profile && . /etc/profile
test -f "$HOME/.profile" && . "$HOME/.profile"
# Second read /etc/xprofile and .xprofile for X specific setup
test -f /etc/xprofile && . /etc/xprofile
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"

따라서 ~ / .profile/ bin / bash가 아닌 / bin / sh를 사용하여 로그인 소스가됩니다.

두 가지 경우가 있습니다

  1. / bin / sh/ bin / bash에 연결되어 있지만 “POSIX / Bourne”모드에서 실행됩니다.
  2. / bin / sh/ bin / dash (debian / ubuntu)입니다. 가장 빠르지 만 기능이 적은 (ShellShock 지원;) )

따라서 / bin / sh 프로파일은 ~ / .bash_profile, ~ / .zprofile이 아니라 ~ / .profile입니다.

이 파일은 경로 및 환경 변수와 같은 “쉘 불가지론 적” 설정에 사용해야 합니다.

NO 로그인 전용 사용자 상호 작용을위한 실행 프로그램이 될 수 없지만 여기에해야한다 (메일 체크, 재산, 등등 …)

~ /.* rc는 “대화식”세션에만 사용됩니다 (예 : 별칭).

대화식 로그인 쉘의 bash와 zsh에는 차이가 있습니다

bash는 .bash_profile 만 소스하고 zsh는 순서대로 제공합니다.

  1. ~ / .zprofile
  2. ~ / .zshrc
  3. ~ / zlogin (여기서 ~ / .zshrc에 정의 된 별명을 사용할 수 있습니다. “대화식”+ “로그인”쉘의 경우

~ / .bash_profile 을 수행하는 올바른 방법 은 다음과 같습니다.

.bashrc와 .bash_profile의 차이점

if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

테스트 (및 프로파일 링)를 사용하려면 다음을 사용하십시오.

~ / .bash_profile :

#!/bin/bash

# ------------------------------------------------
export _DOT_BASH_PROFILE_0=`date  --rfc-3339=ns`
# ------------------------------------------------

if [ -f ~/.profile ] ; then
    . ~/.profile
fi

case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

# ------------------------------------------------
export _DOT_BASH_PROFILE_1=`date  --rfc-3339=ns`
# ------------------------------------------------

~ / .zprofile :

#!/bin/zsh

# ------------------------------------------------
export _DOT_ZSH_PROFILE_0=`date  --rfc-3339=ns`
# ------------------------------------------------

if [ -f ~/.profile ] ; then
    . ~/.profile
fi

# no need to source, zsh already handle ~/.zshrc

###case "$-" in *i*) if [ -r ~/.zshrc ]; then . ~/.zshrc; fi;; esac

# ------------------------------------------------
export _DOT_ZSH_PROFILE_1=`date  --rfc-3339=ns`
# ------------------------------------------------

그런 다음 테스트하십시오.

chsh -s /bin/bash

ssh localhost
env

exit

ssh localhost env

ssh -t localhost bash -i -c env


chsh -s /bin/zsh

ssh localhost
env

exit

ssh localhost env

ssh -t localhost bash -i -c env

따라서 RVM / virtualenv는 ~ / .profile, IMHO로 이동해야합니다.

그러나이 작동하지 않음 , 때로는

예를 들어 virualenvwrapper 는 Xsession을 실행하는 쉘이 “원본”bash (BASH_VERSION 내보내기) 인 경우에만 작동합니다.

당신은에있는 경우 대시 시스템, 환경 변수 및 경로 설정 작동하지만 virualenvwrapper 스크립트는 POSIX를 준수하지 않기 때문에 함수 정의가없는 일을.

스크립트는 오류를 발생시키지 않지만 “workon” 정의 없이 종료 됩니다.

따라서 ~ / .profile 에서 환경을 설정할 수 있습니다 . X에서 직접 시작한 클라이언트에서 올바른 파이썬 실행을 활성화하기 만하면됩니다.

export VIRTUAL_ENV="/home/mike/var/virtualenvs/myvirtualenv"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset PYTHON_HOME

https://gist.github.com/datagrok/2199506

https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all

그러나 virualenvwrapper의 경우 두 가지 대안이 있습니다.

  1. 터미널이 로그인 쉘 역할을 할 때 ~ / .bash_profile 또는 ~ / .zprofile (또는 ~ / .zlogin) 에서 소스
  2. ~ / .bashrc 또는 ~ / zshrc에 스크립트 포함

즉, X 클라이언트 (예 : Emacs)는 그래픽이 아닌 터미널 쉘에서 시작해야합니다!

“만족할 수 없다 …”


답변