私は、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のsourceと同等のことをする方法はすでにわかっている。この質問:
$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
(私の知る限り、ファイルが実際に存在するかどうかを確認する機能はありません)、ファイル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
ます)。