私は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