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 中的原始程式碼相同的操作這個問題:

$include /path/to/global/inputrc

但問題是,就像上面的 bashrc 中一樣,我想要一些錯誤處理,我只想載入該檔案(如果它確實存在)。因此我的問題是,如何指定 if 語句檢查我的 inputrc 中是否存在檔案?

答案1

您不需要$include從您的,~/.inputrc因為您可以隨時讀取 inputrc 文件

bind -f /path/to/global/inputrc

因此,請使用您常用的if [ -r file ]this 而不是source.


的手冊頁顯示,對於互動式登入 shell,它讀取/etc/profile 並第一個找到~/.bash_profile~/.bash_login~/.profile。對於其他互動式 shell,它讀取~/.bashrc,對於非互動式 shell,它讀取檔案$BASH_ENV(如果有)。

在您的情況下,您可能正在使用終端模擬器的非登入互動式 shell,因此~/.bashrc可以讀取。您可以使用strace和 虛擬 home 來查看會發生什麼,例如在 中/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在文件中進行設定。

答案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手冊中)。

相關內容