내가 여는 모든 터미널에서 왜 '.profile'을 소스해야합니까?


10

~/.profile우분투 에서 변수를 변경 하면 명령을 실행합니다 source .profile. 그런 다음 이 터미널 에서만 변경이 적용 됩니다 . 새 터미널을 열면 명령을 source .profile다시 실행해야 합니다. 따라서 서로 다른 터미널은 동일한 사용자에게 속할 수 있지만 자체 환경이있는 것 같습니다.

모든 터미널이 자체 환경 경로를 가지게하는 이점은 무엇입니까? 동일한 사용자에게 속한 다른 터미널이 동일한 환경 변수를 공유하면 더 좋을 것 같습니다.



로그인 "쉘"이 GUI 인 경우 GUI 대신 sh의 로그인 스크립트에서 var를 설정하는 데 큰 도움이되지 않습니다.
ikegami

답변:


14

그 이유는 ~/.profile로그인 셸에서만 제공되기 때문입니다 . 새 터미널 창을 열면 시작되는 쉘은 기본적으로 비 로그인 쉘입니다. 로그 아웃했다가 다시 로그인하면 세션에 로그인 할 때 변경 사항 ~/.profile이 적용되므로 모든 터미널에서 변경 사항이 적용 됩니다 ~/.profile.

다른 터미널 윈도우의 환경이 다른 경우는 아니지만 소싱 이 현재 쉘 ~/.profile에서만 실행 ~/.profile됩니다 (이것은 source명령이 수행하는 것입니다).

반대로로 변경 ~/.bashrc하면 열려있는 모든 새 터미널 창이나을 입력하여 시작하는 모든 Bash 셸에 즉시 영향을 미칩니다 bash. 모든 대화 형 Bash 셸에서 제공되기 때문입니다.


3

환경 변수는 사용자 환경 설정만을위한 것이 아닙니다. 부모 프로세스에서 시작되는 자식 프로세스로 다양한 설정 정보를 전달하는 일반적인 메커니즘입니다.

프로세스가 시작하는 프로세스 에만 영향을주기 위해 프로세스가 특정 환경 변수를 설정하는 경우가 많이 있습니다 . 예를 들어, 스크립트는 시작된 명령에 대한 로케일 설정을 의도적으로 재설정하여 출력을 구문 분석 할 수 있습니다. 많은 대형 소프트웨어 패키지의 빌드 스크립트는 make환경 변수를 통해 서로 조정 된 중첩 호출을 사용 합니다. 특수 도구는 $ LD_PRELOAD 또는 $ PATH로 트릭을 수행하여 시작하는 다른 프로그램의 작업 조건을 변경해야 할 수도 있습니다.

긴 컴파일이 다른 컴파일에서 실행되는 동안 사용자가 다른 창에서 수행하는 작업은 모든 프로세스 의 환경 변수를 등 뒤에 마 법적으로 변경하면 광기와 혼돈이 발생합니다.

다른 환경 변수에는 프로세스가 시작된 특정 세션에 대한 정보가 포함됩니다. 프로그램은 $ TERM이 연결된 특정 터미널 (또는 터미널 에뮬레이터)의 명령 세트를 설명 할 것으로 예상합니다. 일반적인 사용자 별 설정으로 인해 여러 종류의 터미널을 사용하여 동일한 시스템에 로그인 할 수 없습니다. 터미널 하드웨어가 하나만 있고 원격으로 로그인하지 않더라도 screen세션 내에서 실행되는 프로세스에 대해 다른 $ TERM 설정에 의존하는 것과 같은 프로그램 이 있습니다.

더 나은 질문은 왜 사용자 별 데이터베이스가 아닌 사용자 기본 설정에 프로세스 간 프로세스 통신 메커니즘을 사용하는 것입니까?

답변 : 제대로 작동 하고 사용자 별 데이터베이스를 만드는 이점 은 환경 변수 대신 사용 하도록 모든 것을 변경하는 작업이 수행 될만큼 충분히 크지 않기 때문입니다.

이 곳 (나는 거의 기본 설정 생각할 수 없는 것 , 예를 들어, 그냥 하나의 스크립트를 실행을 변경하기 편리 몇 가지 사용 사례를합니다. 그래서를 위해하지 잃게 기능에, 모든 것이 여전히 필요가 재정의 하여 환경 변수-복잡성을 증가시키고 사용자를 혼란스럽게 만듭니다.

대안이 존재 하지 않는 것처럼 보이지 않습니다 . 예를 들어 X 리소스는 프로세스가 아닌 디스플레이 세션 당입니다. 그러나 그들은 명령 줄 프로그램에 대한 액세스가 어렵습니다 - 그리고 명령 줄 프로그램은 일반적으로조차하지 않는 원격 로그인에 대한 작업에 필요 에 연결하는 X 서버를.

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