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 ]대신에 평소에 사용하던 것을 사용하세요 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(파일이 실제로 AFAIK에 존재하는지 확인하는 기능이 없음) 파일 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

관련 정보