저는 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
댓글
- 일부는 정확하지만”항상
~/.bashrc
를 읽으십시오 “는 나쁜 조언입니다. 만 읽어야합니다. div id = “47c28d63fc”>
대화 형 셸에서 .' 여기서 핵심 문제를 놓쳤습니다. X에서 로그인 할 때 bash의 로그인 인스턴스가 없다는 것입니다 (분명히 AntonioK를 포함한 대부분의 디스플레이 관리자 / 데스크톱 환경 조합 아래에 있음). ' s).
.bashrc
"를 읽으세요. 저는 항상 대화 형 셸을 의미했습니다. . 그 부분을 명확히했습니다. 더 이상 오해하지 않기를 바랍니다. .profile
( link ) " 위키는 한 번 (당연히) 낙담했습니다. '이 수정되었습니다. (참고 /etc/profile
는 /etc/profile.d
에 스크립트를 추가하는 것보다 시스템 전체 할당에 권장되지 않습니다.) 사용자 별 .profile
파일은 이제 사용자 별 환경 변수를 설정하는 권장 방법 중 하나로 표시됩니다. " 특정 사용자에게만 영향을주는 환경 변수 설정에 적합한 파일 ( 시스템 전체가 아니라) ~ / .pam_environment 및 ~ / .profile 입니다. " ~/.profile
를 읽지 않도록 지정하고 ~/.xsessionrc
는 대신 사용되었습니다. 답변
다음과 같은 경우 몇 가지 문제가 발생합니다. ~ / .profile 파일을 다시로드 / 소스 화하려고합니다. [Ubuntu linux를 나타냅니다. 경우에 따라 명령의 세부 정보가 다를 수 있습니다.]
- 이를 터미널에서 직접 실행합니까 아니면 스크립트에서 실행합니까?
- 어떻게합니까? 스크립트에서 실행 하시겠습니까?
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 터미널의 경우 “로그인 셸로 명령 실행”상자를 선택할 수 있습니다. 이 도움말은 로그인 셸과 그렇지 않은 셸의 차이점을 설명합니다.