쉘을 호출할 때 gnome-terminal이 PATH를 수정하는지 여부

쉘을 호출할 때 gnome-terminal이 PATH를 수정하는지 여부

PATHgnome-terminal이 쉘을 호출할 때 환경 변수를 수정했을 수도 있습니다. 특히 는 $HOME/.local/bin:$HOME/bin항상 에 추가됩니다 PATH.

나는 이를 증명하기 위해 다음과 같은 실험을 했습니다.

  • 그놈 터미널 열기
  • 편집->기본 설정->프로필로 이동하여 현재 프로필을 "편집"합니다(저에게는 "이름 없음"이었습니다).
  • "명령" 탭에서 "내 쉘 대신 사용자 정의 명령 실행"을 선택하고 다음 입력 영역을 입력합니다 sh. 이렇게 하면 로그인 쉘이 아닌 bash-way 모드에서 호출되어야 합니다 .sh
  • /etc/profile, ,을(를 $HOME/.bash_profile) $HOME/.bashrc획득하지 못하도록 하기 위해 일시적으로 해당 파일의 이름을 변경합니다. (실제로 non-login 을 호출하고 있으므로 이 파일을 가져오면 안 됩니다 sh.)
  • 이제 새 gnome 터미널 창을 열고 echo $PATH다음을 실행합니다.

    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/naitree/.local/bin:/home/naitree/bin
    

마지막 두 경로가 PATH.

이러한 사실을 바탕으로 다음과 같은 설명이 가능하다고 생각합니다.

  1. PATH이 경우 상위 프로세스에서 상속 됩니다 gnome-terminal-server.
  2. PATH어느 시점에서 신비롭게 시작된 스크립트에서 수정되었습니다 .sh
  3. PATHgnome-terminal-server가 하위 프로세스를 포크할 때 수정됩니다.

이제 나는 가능성 #1과 #2를 배제했다고 생각합니다.

  1. cat /proc/$PPID/environPID $PPIDgnome-terminal-server해당 PATH변수가 /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin우리가 찾고 있는 내용을 포함하지 않음을 나타냅니다.
  2. sh방금 열고 실행한 프로세스에서는 export -n PATHsh -x새로운 init 프로세스에 어떤 소스도 표시되지 않습니다 sh. 그리고 그것은 PATH깨끗합니다:

    /usr/local/bin:/usr/bin
    

이제 마지막 가능성이 하나 남았습니다.

내가 뭐 놓친 거 없니? 신비한 수정에 대해 gnome-terminal이 책임이 있습니까 PATH?


고쳐 쓰다:

sh -x방금 사용자 정의 명령으로 시도했습니다 . 곤메 터미널을 연 후 아무것도 보이지 않습니다. 그러나 echo $PATH그렇게 말하고 $HOME/.local/bin거기 $HOME/bin에 있으십시오.

다음은 출시에 관한 정보입니다.

  • 페도라 23(4.4.8-300.fc23.x86_64)
  • bash 버전 4.3.42(1)-릴리스(x86_64-redhat-linux-gnu)

업데이트 2:

방금 시도했습니다.

  • echo "$PATH"맨 처음에 추가되었습니다 ~/.bashrc.
  • bash를 사용하여 기본 비로그인 쉘 모드에서 gnome-terminal을 열고 사용자 정의 명령을 사용하십시오 bash -x.

디버그 출력을 토대로 이것이 ~/.bashrc스크립트 소스의 시작점임을 확인했습니다. 그러나 $HOME/.local/bin과 는 $HOME/bin그 이전에도 존재했습니다 PATH.

답변1

PATH처음에 터미널을 /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin.

평소 의심되는 항목을 모두 확인한 후 , ~/.bashrc, ~/.bash_profile, 에서 설정을 변경해 보았습니다 . 그러나 나는 결국 여전히 거기에 있습니다./etc/bashrc/etc/profileDefaultEnvironment/etc/systemd/system.conf/etc/systemd/user.conf/usr/local/...PATH

pam_env우연히 에 대한 언급을 발견했습니다. 그래서 다음 줄을 추가했습니다 /etc/security/pam_env.conf.

PATH DEFAULT=/bin:/sbin

다시 로그인한 후 터미널 쉘은 PATH성가신 로컬 ​​경로를 제거했습니다.

pam_envsystemd 구성을 변경한 후 PID 1이나 프로세스 모두 systemd --user환경에 로컬 경로가 없기 때문에 기본값이 다음에서 비롯된 것이라고 확신합니다 gnome-terminal-server.

최신 Linux는 구성의 악몽이 되고 있습니다.

나는 이것이 OP의 질문에 대한 대답이 아니라는 것을 알고 있습니다. 하지만 언급할 가치는 충분할 것 같습니다.

답변2

Fedora의 의견에 따르면,~/.local/bin을 기본 경로에 추가하세요., 이는 Fedora 관련 변경 사항입니다.세게 때리다몇 년 전의 구성입니다.

변화는RPM으로 제작(업스트림 아님) 문서화되지 않았습니다.

관련 정보