' 내 ~ / .bash_profile이 작동하지 않는 이유는 무엇입니까?

저는 Linux Mint를 사용하고 있습니다. 로그인 셸 (cat /etc/passwd | grep myUserName)은 bash입니다.

그래픽 데스크톱 환경을 시작하고 여기에서 터미널 에뮬레이터를 실행하면 .bash_profile가 소싱되지 않았 음을 알 수 있습니다 (export ed가 설정되어 있지 않습니다.)하지만 텍스트 콘솔 ( ctrl + alt + F1 )에서 로그인하거나 수동으로 실행하면 bash -l 터미널 에뮬레이터에서 .bash_profile 잘 작동합니다.

.bash_profile는 X가 시작될 때 소싱되어야하며 모든 export “된 변수가 X에서 실행되는 터미널에서 사용 가능해야합니까?

PS 모든 것을 .bashrc에 배치하고 .bash_profile에서 소싱하는 것은 좋은 생각이 아닙니다 ( https://stackoverflow.com/questions/902946/ ) : 환경 관련 항목은 한 번만 제공되어야합니다.

답변

~/.bash_profile 파일은 로그인 셸일 때 bash에서 읽습니다. 이것이 텍스트 모드로 로그인 할 때 얻게되는 것입니다.

X로 로그인하면 시작 스크립트가 /bin/sh에 의해 실행됩니다. Ubuntu 및 Mint, /bin/sh는 bash가 아닌 대시 입니다. 대시와 bash는 모두 핵심 기능이 동일하지만 대시는 이러한 핵심 기능은 빠르고 작게하기위한 반면 bash는 더 많은 리소스를 필요로하는 비용으로 많은 기능을 추가합니다. 추가 기능이 필요하지 않은 스크립트에는 dash를 사용하고 대화 형 사용에는 bash를 사용하는 것이 일반적입니다 ( zsh 많은 멋진 기능이 있습니다 ).

대부분의 디스플레이 조합 관리자 (사용자 이름과 암호를 입력하는 프로그램) 및 데스크톱 환경은 /etc/X11/Xsession, iv id의 로그인 스크립트에서 ~/.profile를 읽습니다. = “0f4601ee03″>

, /etc/gdm/Xsession 또는 해당되는 항목입니다. 따라서 환경 변수 정의를 ~/.profile에 넣으십시오. 대시가 지원하는 구문 만 사용해야합니다.

그러면 어디에 넣어야합니까?

  • 좋은 .bash_profile.profile를로드하고 셸이 대화 형인 경우 .bashrc를로드합니다.

    . ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi 
  • .profile에 환경 변수 정의 및 ulimit와 같은 기타 세션 설정을 입력합니다.

  • .bashrc에서 별칭, 함수, 완성, 키 바인딩 (),…

로그인 셸과 비 로그인 셸의 차이점 .bashrc의 대안 .

댓글

  • 단일 답변에서 얻은 많은 정보 : )
  • .profile조차도 ' Debian 10에서 작동하지 않습니다. " Buster ", .bashrc wor 만 ks

Answer

.bash_profile는 다음의 시작 구성 스크립트입니다. 세게 때리다. 소스 .bash_profile에 X를 지정하는 표준이 없습니다.

당신이 생각하는 것은 오히려 .profile입니다. 원래 bourne 셸 (sh)의 시작 구성 파일이었습니다. 오늘날 많은 배포판에는 .profile 소스로 설정된 데스크톱 환경이 있습니다. 이것은 또한 표준은 아니지만 관례 인 것 같습니다.

데비안은 그래픽 로그인에서 .profile를 소싱하는 데 사용되었습니다 ( 2013 년 기준 Wiki 페이지 ) 현재는 그렇지 않습니다 ( 2016 년 Wiki 페이지 ).

그래픽 로그인시 .xprofile 아카이브 소스 ( 2013 년 기준 Wiki 페이지 )

Ubuntu는 .profile ( 2013 년 기준 위키 페이지 ) 사용을 권장하지 않았으나 이제는 더 이상 권장하지 않습니다 ( 2016 년 기준 위키 페이지 ).


다른 질문에 대해 : 내 ~ / .bash_profile이 작동하지 않는 이유는 무엇입니까? 예상되는 동작입니다.

간단한 동작은 다음과 같습니다.

  • bash가 대화 형 로그인 셸로 시작되었습니다. ~/.profile
  • bash가 대화 형 비 로그인 셸로 시작되었습니다. ~/.bashrc
  • 를 읽습니다.

자세한 내용은 Simil askubuntu의 ar 질문 : https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319

댓글

대화 형 셸에서 .' 여기서 핵심 문제를 놓쳤습니다. X에서 로그인 할 때 bash의 로그인 인스턴스가 없다는 것입니다 (분명히 AntonioK를 포함한 대부분의 디스플레이 관리자 / 데스크톱 환경 조합 아래에 있음). ' s).

  • 의견을 보내 주셔서 감사합니다. 귀하의 불만을 해결할 수 있도록 답변을 잘 업데이트했으면합니다. "에 대한 조언에 대해서는 항상 .bashrc "를 읽으세요. 저는 항상 대화 형 셸을 의미했습니다. . 그 부분을 명확히했습니다. 더 이상 오해하지 않기를 바랍니다.
  • " Ubuntu는 특히 .profile ( link ) " 위키는 한 번 (당연히) 낙담했습니다. '이 수정되었습니다. (참고 /etc/profile/etc/profile.d에 스크립트를 추가하는 것보다 시스템 전체 할당에 권장되지 않습니다.) 사용자 별 .profile 파일은 이제 사용자 별 환경 변수를 설정하는 권장 방법 중 하나로 표시됩니다. " 특정 사용자에게만 영향을주는 환경 변수 설정에 적합한 파일 ( 시스템 전체가 아니라) ~ / .pam_environment ~ / .profile 입니다. "
  • Debian에 대한 링크 된 페이지는 Debian이 그래픽 로그인에 대해 ~/.profile를 읽지 않도록 지정하고 ~/.xsessionrc는 대신 사용되었습니다.
  • 알려 주셔서 감사합니다. 위키 페이지가 업데이트되었습니다. 답변 당시의 버전에 연결했습니다.
  • 답변

    다음과 같은 경우 몇 가지 문제가 발생합니다. ~ / .profile 파일을 다시로드 / 소스 화하려고합니다. [Ubuntu linux를 나타냅니다. 경우에 따라 명령의 세부 정보가 다를 수 있습니다.]

    1. 이를 터미널에서 직접 실행합니까 아니면 스크립트에서 실행합니까?
    2. 어떻게합니까? 스크립트에서 실행 하시겠습니까?

    Ad. 1)

    터미널에서 직접 실행하면 서브 쉘이 생성되지 않습니다. 따라서 두 가지 명령 중 하나를 사용할 수 있습니다.

    source ~/.bash_profile 

    또는

    . ~/.bash_profile 

    두 경우 모두 그러면 .profile 파일의 내용으로 환경이 업데이트됩니다.

    Ad 2)

    sh myscript.sh 
    또는

    . myscript.sh 

    첫 번째 경우 이것은 환경 변수에 영향을주지 않는 서브 쉘을 생성합니다. 당신의 시스템과 그것들은 서브 쉘 프로세스에서만 볼 수 있습니다. 서브 쉘 명령을 완료 한 후에는 내보내기 등이 적용되지 않습니다. 이것은 일반적인 실수이며 많은 개발자들이 많은 시간을 늦추는 원인이됩니다.

    스크립트에 적용된 변경 사항이 전역 환경에서 스크립트는

    .myscript.sh 

    명령으로 실행해야합니다.

    스크립트가 실행되지 않도록하려면 이 기능을 사용할 수있는 서브 쉘프입니다. (다시 한 번 우분투 셸에 대한 예입니다.)

    #/bin/bash preventSubshell(){ if [[ $_ != $0 ]] then echo "Script is being sourced" else echo "Script is a subshell - please run the script by invoking . script.sh command"; exit 1; fi } 

    이로 인해 일반적인 오해가 해결되기를 바랍니다. : D 행운을 빕니다!

    답변

    질문에서 https://stackoverflow.com/questions/902946/ 수락 된 답변 이 다음과 같이 규정 할 때 출처를 밝히지 말 것을 권장합니다.

    • 내 PATH 설정을 .profile 파일에 넣습니다 (때로는 다른 셸을 사용하기 때문)
    • 내 Bash 별칭과 함수를. bashrc 파일
    • 그런 다음 [수정 됨 : 코드 주석 자르기]를 사용합니다.

      .bash_profile :

      #!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases 

    .profile에 모두 입력했습니다. Linux Mint에서는 작동하지 않습니다. .bashrc를 사용하면 잘 작동했습니다.

    답변

    간단한 해결책은 터미널 로그인 터미널. 기본 프로필의 “타일 및 명령”아래에있는 Gnome 터미널의 경우 “로그인 셸로 명령 실행”상자를 선택할 수 있습니다. 도움말은 로그인 셸과 그렇지 않은 셸의 차이점을 설명합니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다