Readline
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 中我想要一些錯誤處理,我只想載入文件如果它確實存在。因此我的問題是,如何指定一個 if 語句來檢查我的 inputrc 中是否存在文件?
您不需要
$include
從您的~/.inputrc
,因為您可以隨時讀取 inputrc 文件bind -f /path/to/global/inputrc
所以用你通常
if [ -r file ]
的 this 而不是source
.手冊頁說明了它讀取的互動式登錄 shell
/etc/profile
以及第一個找到的~/.bash_profile
、~/.bash_login
和~/.profile
. 對於其他互動式外殼,它讀取~/.bashrc
,對於非互動式外殼,它讀取文件($BASH_ENV
如果有)。在您的情況下,您可能正在為終端仿真器使用非登錄互動式 shell,因此
~/.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
所以 bash 會
.inputrc
在.bashrc
. 這是有道理的,因為它讓您有時間INPUTRC
在文件中進行設置。