나는 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
에 문서화되어 있습니다 ( 매뉴얼에도 문서화되어 있습니다).readline
bash