저는 Debian Stretch와 Xfce를 사용하고 있습니다. 내 ~/bin
디렉토리에는 많은 스크립트가 있습니다. 이것은 물론 내 파일입니다 $PATH
. 때로는 세션 및 시작 > 응용 프로그램 자동 시작을 통해 Xfce에 로그인할 때 거기에서 스크립트를 실행합니다. 내 ~/.bashrc
파일에는 사용자 정의 별칭과 함수가 있습니다. 더 짧은 코드를 작성하기 위해 파일의 함수를 사용하고 ~/.bashrc
있는데 이에 대한 전체 스크립트를 만들고 싶지 않습니다 ~/bin
. 그러나 때로는 내 파일의 ~/.bashrc
기능을 GUI 로그인 항목으로 실행 하고 싶을 때가 있습니다.
에서 테스트 기능을 만들었습니다 ~/.bashrc
. 그런 다음 에서 실행되도록 함수를 설정했습니다 ~/.profile
. 다음을 수행하면 함수가 성공적으로 실행됩니다. - bash -l
터미널에서 실행 - tty 세션에 로그인
그런데 LightDM에서 그래픽 Xfce 환경에 로그인하면 실행되지 않습니다. 이 기능은 Xfce의 세션 및 시작 > 응용 프로그램 자동 시작에 추가된 경우에도 실행되지 않습니다. 추가 테스트를 위해 직접 실행했습니다 ~/.profile
. Xfce에 로그인했을 때 실행되었습니다.
~/.bashrc
그래픽 환경에 로그인되어 있는 동안에는 함수를 실행할 수 없습니다. 이것은 버그입니까? GUI 로그인 시 기능을 실행하려면 설정을 활성화해야 합니까? 아니면 이것이 내 시스템이 설계된 방식입니까? 감사해요
답변1
기본 ~/.profile
소스가 비어 있지 않은 경우에만, 즉 (기본값에서):~/.bashrc
BASH_VERSION
.profile
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Lightdm에서 시작 스크립트는 에 의해 실행되고 /bin/sh
Debian에서는 심볼릭 링크입니다./bin/dash
. 이는 ~/.profile
시작 시 BASH_VERSION
비어 있으므로 ~/.bashrc
가져오지 않음을 의미합니다.
가능한 해결책
실행 기능
~/bin
또 다른 해결책(시작 시 여러 솔루션이 필요한 경우)은 모든 기능을 저장하는 위치를 알려주는 별도의 파일을 갖고
~/.startup_functions
거기에서 파일을 가져와.profile
거기에서 기능을 실행하는 것입니다. 를 사용하여 실행하므로/bin/dash
호환성을 확인해야 합니다.
그렇지 않고 시작 시 bash
시작 쉘 및 소스로 사용 하려는 경우 .bashrc
할 수 있는 한 가지는 bash
default 로 설정하는 것입니다 /bin/sh
. 즉, 다음을 실행하십시오.
$ dpkg-reconfigure dash
그리고 지시를 따르세요.
에서 함수를 정의하고 시작 시 실행하려면 .bashrc
대화형인 경우에만 쉘이 로드된다는 점에 유의하십시오. .profile
기본적으로 다음 테스트가 있는 경우.bashrc
.bashrc
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
이는 이 테스트를 제거하거나 이전에 필요했던 기능을 정의해야 함을 의미합니다. 어쨌든 저는 ~/bin
.