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の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ます)。

関連情報