gnome/nautilus에서 실행되는 Bash 스크립트에는 환경 변수가 없습니다.

gnome/nautilus에서 실행되는 Bash 스크립트에는 환경 변수가 없습니다.

내 ~/.bashrc 및 ~/.profile에서 일부 변수를 일부 파일 경로에 설정했습니다.

export MY_VAR1="/path/to/somewhere"

내 ~/bin/(PATH에 추가됨)에는 설정되는 변수에 의존하는 일부 스크립트가 있습니다.

터미널에서 이 명령을 실행하면 예상대로 작동합니다.

그런데 노틸러스에서 스크립트를 더블클릭해서 실행하려고 하면 마치 이 변수들이 설정되지 않은 것처럼 실행됩니다.

GUI 유틸리티를 사용하여 스크립트 중 하나를 Gnome의 "시작 응용 프로그램"에 추가하거나 "주 메뉴" GUI 유틸리티를 사용하여 Gnome 메뉴에 추가하는 경우에도 동일한 일이 발생합니다.

로그인 시 실행되는 ~/.profile에 이러한 변수를 포함시켰기 때문에 gnome과 nautilus 및 이들이 생성하는 프로세스가 이러한 변수에 액세스할 수 있을 것이라고 생각했을 것입니다.

Gnome과 Nautilus는 모두 로그인한 사용자로 실행됩니다. ~/bin의 모든 스크립트 상단에 bash shebang이 있습니다.

저는 bash 스크립팅을 처음 접했습니다. 분명한 것이 빠졌다면 죄송합니다. 저는 Debian Wheezy와 Gnome3을 사용하고 있습니다.

답변1

이는 X 세션을 시작하면 ~/.bashrc합계를 읽지 않기 때문입니다 ~/.profile. 일반적으로 데스크탑 관리자는 init 스크립트에서 루트 또는 자체 사용자로 시작됩니다. 데스크탑 관리자 시작 스크립트에 도달하면 생성된 프로세스는 일반적으로 init 프로세스의 환경을 갖습니다. (이 시점에서는 덜 성숙한 init 구현에 대해서는 언급하지 않겠습니다.)

로그인하면 해당 환경을 상속하는 하위 프로세스가 생성됩니다. 하위 프로세스는 uid 및 run 에 권한을 부여하며 /etc/X11/Xsession일반적으로 모든 스크립트를 실행합니다 /etc/X11/Xsession.d. 이러한 스크립트는 일반적으로 환경 변수를 설정하거나 데스크탑 환경의 호출을 구체적으로 수정합니다.

해당 디렉토리 에서 40x11-common_xsessionrc. 모든 GUI 프로세스 는 이 프로세스에서 생성되므로 .~/.xsessionrc/etc/X11/Xsession.d/etc/X11/Xsession.d~/.xsessionrc

~/.xsessionrc은 스크립트 파일이므로 소스 코드를 사용할 수 있지만 ~/.bashrc이는 정말 나쁜 스타일입니다. 왜냐하면 DE 소스 코드가 해당 환경을 상속한 다음 ~/.bashrcbash 소스 코드를 다시 사용하여 원치 않는 부작용이 발생할 수 있기 때문입니다.

~/.myenvironmentvariables그러나 엄격한(환경) 변수 정의를 포함하고 소스가 ~/.bashrc및 인 a를 사용하는 것은 완벽하게 허용됩니다 ~/.xsessionrc. 이렇게 하면 모든 프로세스가 에 지정된 변수 ~/.myenvironmentvariables, 특히 Nautilus에서 두 번 클릭한 셸 스크립트를 상속하게 됩니다.

관련 정보