Bash

為什麼在 .bashrc 中有對不存在的 bash 完成文件的引用

  • September 4, 2022

我清理了我的~/.bashrc,我發現了這個:

if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
   . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
   . /etc/bash_completion
 fi
fi

這些路徑不存在,我很確定它們以前從未存在過。我正在使用 Debian 順便說一句…開發人員忘記刪除它了嗎?

謝謝你的資訊

這段bashshell 程式碼的作用是從兩個文件中找到第一個文件,但前提是 shell 的posix選項未啟動。這兩個文件可能提供特定於 shell 的可程式自動完成支持。

在 Debian Linux 系統上,提到的兩個路徑名都由 package 提供bash-completion。如果您沒有安裝該軟體包,那麼 shell 程式碼將不會執行任何操作。

bashDebian 上的軟體包將這段程式碼放在/etc/skel/.bashrc. 它是/etc/skel在創建新使用者帳戶時複製使用者的初始文件集,這意味著.bashrc文件從復製/etc/skel/.bashrc~/.bashrc,以及帶有它的程式碼。一旦創建了帳戶並且使用者可以訪問它,使用者可能會刪除或修改初始文件集,具體取決於他們的偏好。

該程式碼存在是因為bash-completion可能未安裝該軟體包。畢竟,它只是 Debian 上軟體包的推薦依賴項bash(已bash在 2008 年從軟體包中拆分為自己的軟體包)。如果bash-completion安裝了包,想必使用者想使用shell的可程式補全系統,所以文件有源。如果不需要,請考慮解除安裝bash-completion軟體包,或者在多使用者系統上,刪除或註釋掉~/.bashrc.

影響此程式碼外觀的相關 Debian 錯誤報告:

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