Linux Mint를 사용하고 있습니다. 내 로그인 쉘 ( cat /etc/passwd | grep myUserName
)은 bash입니다.
그래픽 데스크탑 환경을 시작하고 그 환경에서 터미널 에뮬레이터를 실행하면 .bash_profile
소스가 아닌 것을 알 수 있습니다 (환경 환경 변수 export
가 설정되어 있지 않음). 그러나 텍스트 콘솔 ( ctrl+ alt+ F1) 에서 로그인 하거나 bash -l
터미널 에뮬레이터에서 수동으로 실행 하면 .bash_profile
정상적으로 작동합니다.
.bash_profile
X가 시작될 때 소스 export
되어야하고 X에서 실행되는 터미널에서 모든 ‘vars를 사용할 수 있어야 한다고 생각하면 잘못 되었습니까?
추신 : 모든 것을 .bashrc
넣고 소싱하는 .bash_profile
것은 좋은 생각이 아닙니다 ( https://stackoverflow.com/questions/902946/ ) : 환경 관련 자료는 한 번만 제공해야합니다.
답변
파일 ~/.bash_profile
은 로그인 쉘일 때 bash에서 읽습니다. 텍스트 모드로 로그인하면 얻을 수있는 것입니다.
X로 로그인하면 시작 스크립트가에 의해 실행됩니다 /bin/sh
. 우분투와 민트에서 /bin/sh
입니다 대시 하지 배쉬. 대시와 bash는 모두 동일한 핵심 기능을 갖지만 빠르면서 작게하기 위해 이러한 핵심 기능에 대시를 사용하는 반면 bash는 더 많은 리소스를 요구하는 비용으로 많은 기능을 추가합니다. 추가 기능이 필요하지 않은 스크립트에는 대시를 사용하고 대화식 사용에는 bash를 사용하는 것이 일반적입니다 ( zsh 에는 많은 기능이 있습니다 ).
디스플레이 관리자의 대부분의 조합 읽고 데스크탑 환경 (사용자 이름과 암호를 입력 프로그램) ~/.profile
에 로그인 스크립트에서 /etc/X11/Xsession
, /usr/bin/lightdm-session
, /etc/gdm/Xsession
또는 중 적용합니다. 따라서 환경 변수 정의를에 넣으십시오 ~/.profile
. 대시가 지원하는 구문 만 사용해야합니다.
그래서 어디에 두어야합니까?
-
쉘이 대화식이면 good
.bash_profile
로드.profile
및로드.bashrc
.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
-
에
.profile
넣어 환경 변수의 정의 및 같은 다른 세션 설정,ulimit
. - 에
.bashrc
별칭, 함수, 완료, 키 바인딩 (에없는.inputrc
) 과 같은 bash 대화식 설정을 입력하십시오 .
로그인 셸과 비 로그인 셸의 차이점을 참조하십시오 . 그리고 .bashrc의 대안 .
답변
.bash_profile
bash의 시작 구성 스크립트입니다. X를 소스로 지시하는 표준은 없습니다 .bash_profile
.
당신이 생각하는 것은 오히려 .profile
입니다. 원래는 bourne shell (sh)의 시작 구성 파일이었습니다. 오늘날 많은 배포판에서 데스크톱 환경을 소스로 설정했습니다 .profile
. 이것은 또한 표준이 아니지만 관습 인 것 같습니다.
데비안 .profile
은 그래픽 로그인 ( 2013 년 현재 위키 페이지) 에서 소스 를 사용 했지만 이제는 그렇지 않습니다 ( 2016 년 위키 페이지 ).
.xprofile
그래픽 로그인시 아치 소스 ( 2013 년 기준 위키 페이지 )
우분투는 .profile
( wiki page 2013 )을 사용하지 않는 것이 더 이상 낙담하지 않습니다 ( 2016 년 wiki page ).
다른 질문과 관련하여 내 ~ / .bash_profile이 왜 작동하지 않습니까? 이것이 예상되는 행동입니다.
간단히 말해서 행동은 다음과 같습니다.
- bash는 대화식 로그인 쉘로 시작했습니다.
~/.profile
- bash는 대화 형 비 로그인 셸로 시작했습니다.
~/.bashrc
자세한 내용은 askubuntu에서 비슷한 질문에 대한 내 대답을 참조하십시오 : https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc / 132319 # 132319
답변
~ / .profile 파일을 다시로드 / 소스 할 때 몇 가지 문제가 발생합니다. [이것은 우분투 리눅스를 의미합니다-어떤 경우에는 명령의 세부 사항이 다를 수 있습니다]
- 터미널이나 스크립트에서 직접 실행합니까?
- 스크립트에서 이것을 어떻게 실행합니까?
광고. 1)
이것을 터미널에서 직접 실행하면 서브 쉘이 생성되지 않습니다. 따라서 두 가지 명령 중 하나를 사용할 수 있습니다.
source ~/.bash_profile
또는
. ~/.bash_profile
두 경우 모두 .profile 파일의 내용으로 환경을 업데이트합니다.
광고 2) 다음 중 하나를 호출하여 bash 스크립트를 시작할 수 있습니다
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 파일에 넣으십시오.
그런 다음이 [EDITED : snip code-comments]를 사용하십시오.
.bash_profile
:#!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases
.profile
Linux Mint 에서는 모든 것을 넣을 수 없었습니다. .bashrc
잘 사용 했습니다.
답변
간단한 해결책은 터미널을 로그인 터미널로 만드는 것입니다. 기본 프로필의 ‘타일 및 명령’아래에있는 Gnome 터미널의 경우 “로그인 명령으로 명령 실행”상자를 선택할 수 있습니다. 이 기사는 로그인 쉘과 그렇지 않은 로그인 쉘의 차이점을 설명합니다.