Readline

inputrc 中的 if 語句

  • June 22, 2016

我正在為我的 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在文件中進行設置。

引用自:https://unix.stackexchange.com/questions/291134