inputrc의 if 문

inputrc의 if 문

나는 bashrc의 중앙 위치를 사용하고 다음과 같이 모든 사용자에게 소스 코드를 제공하고 있습니다.

GLOBAL_BASHRC="/path/to/global/bashrc"

if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
    # Load the bashrc
    source $GLOBAL_BASHRC
else
    echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi

이제 inputrc 파일로 동일한 작업을 수행하고 싶습니다. inputrc의 소스 코드와 동일한 작업을 수행하는 방법을 찾았습니다.이 문제:

$include /path/to/global/inputrc

하지만 문제는 위의 bashrc에서와 같이 오류 처리가 필요하고 파일이 실제로 존재하는 경우에만 로드하고 싶다는 것입니다. 그래서 내 질문은 내 inputrc에 파일이 있는지 확인하기 위해 if 문을 어떻게 지정합니까?

답변1

언제든지 가능하므로 inputrc 파일 $include에서 읽을 필요가 없습니다 .~/.inputrc

bind -f /path/to/global/inputrc

따라서 대신에 평소에 사용하던 if [ -r file ]this를 사용하십시오 source.


의 매뉴얼 페이지는 대화형 로그인 쉘의 경우 , 및 /etc/profile 먼저 읽고 찾는 것을 보여줍니다 . 다른 대화형 쉘의 경우에는 을 읽고 , 비대화형 쉘의 경우 파일이 있으면 해당 파일을 읽습니다.~/.bash_profile~/.bash_login~/.profile~/.bashrc$BASH_ENV

귀하의 경우에는 터미널 에뮬레이터의 비로그인 대화형 셸을 사용하고 있으므로 ~/.bashrc읽을 수 있습니다. strace예를 들어 가상 홈을 사용하여 무슨 일이 일어나는지 확인할 수 있습니다 /tmp.

$ touch /tmp/.inputrc /tmp/.bashrc
$ (unset BASH_ENV INPUTRC HISTFILE
   HOME=/tmp strace -e open -o /tmp/out bash -i)

이는 다음 파일이 열려 있음을 보여줍니다(간결하게 하기 위해 일부 파일을 제거했습니다).

open("/tmp/.bashrc", O_RDONLY)          = 3
open("/tmp/.bash_history", O_RDONLY)    = -1 ENOENT
open("/tmp/.inputrc", O_RDONLY)         = 3
open("/tmp/.bash_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3

.inputrc따라서 bash는 .bashrc. 이는 INPUTRC파일에서 설정할 시간을 주기 때문에 의미가 있습니다 .

답변2

파일에서 이 작업을 수행하는 대신 .inputrc(내가 아는 한 파일이 실제로 존재하는지 확인할 방법이 없음) 환경 변수를 설정할 수 있습니다.INPUTRC.bashrc

if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
    # Load the bashrc
    source $GLOBAL_BASHRC
    if [ -f /path/to/global/inputrc ]; then
        export INPUTRC="/path/to/global/inputrc"
    fi
else
    echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi

이 변수는 매뉴얼 INPUTRC에 문서화되어 있습니다 ( 매뉴얼에도 문서화되어 있습니다).readlinebash

관련 정보