나는 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
에 문서화되어 있습니다 .readline
bash