Bash

在哪里為 out of tree 包安裝 bash 完成腳本?

  • April 4, 2022

我正在 Ubuntu 上安裝ripgrep。它在官方儲存庫或私有 PPA 中不存在,因此我按照項目說明將其安裝為樹外包:https ://github.com/BurntSushi/ripgrep#installation 。

我設法了解到這些軟體包應該存在/usr/local

  • /usr/local/bin對於二進製文件
  • /usr/local/share/doc/<package_name>用於文件
  • /usr/local/share/man用於手冊頁

bash 完成呢?我知道這比其他類別的標準化程度要低一些,並且可能特定於每個Bash安裝。在 Ubuntu 中執行此操作的方法是什麼?

經過大量閱讀後我可以收集到的資訊,特別是他們的官方文件/usr/share/doc/bash-completion/README.Debian以及來源本身:

  • /etc/bash_completion.d/遺留目錄,其中完成被急切地載入,即,當主腳本執行時,所有源一次。只有少數軟體包仍然安裝在那裡,大多數已經遷移到新標準。
  • /usr/share/bash-completion/completions/是由.按需動態載入的完成文件的目錄bash-completion。它們僅在需要提供(最重要的是,如果需要),通過不為您永遠不會使用的命令載入大量完成來節省大量資源。

關於你的這個評論/etc

它將與 apt 受控軟體包混合…我希望有一條單獨的路徑

文件/etc並不完全“易於控制”,至少不是以相同的方式/usr/bin或是/usr/share。**$$ 1 $$**它們是配置文件,它們應該由本地管理員(您)修改。軟體包在安裝時創建它們,通常包含預設值,然後您應該根據需要對其進行修改。

一些包更進一步簡化維護,而不是(或旁邊)配置文件,它們還為“插入”額外的自定義文件創建一個(空)配置目錄。因此,您無需修改grep配置文件以更改某些設置,這是一項使用 和 等工具的困難sed且容易出錯的任務awk,您只需創建(或刪除)覆蓋所需設置的“配置片段”文件。

查看系統中的所有/etc/{,*/}*.d/目錄。您的軟體包是否要安裝自定義儲存庫,例如 Google Chrome?不要編輯/etc/apt/sources.list,將文件放在/etc/apt/sources.list.d/. 新服務?/etc/systemd/system/. 系統設置?/etc/sysctl.d/(順便說一句,請參閱它的自述文件)。

容易得多,而且不會再踩對方的腳趾了。

某些目錄的/usr/share行為也是這樣的:您的.desktop文件轉到/usr/share/applications/,新的 mimetype 轉到/usr/share/mime/packages/,等等。不同之處/etc在於,您,管理員,既不應該修改也不刪除不是您自己創建/安裝的文件。

這正是/usr/share/bash-completion/completions/.


也就是說,我有好消息和壞消息要告訴你:

壞消息是……如果您要在他們的 github 儲存庫中安裝完成,那不是 bash 完成,而是**zsh**完成文件!不,bash 和 zsh 在完成方面完全不兼容。

別擔心,因為好消息是:自 Ubuntu 18.10 起**ripgrep可在 apt 儲存庫中使用!**耶!:D

sudo apt install ripgrep

你猜怎麼著?它包含一個bash 完成文件!當然,安裝在/usr/share/bash-completion/completions/rg.

是時候高興了,伙計!


$$ 1 $$: 老實說,你可以說他們是“容易被監控”,而不是被控制。閱讀您需要了解的關於 conffiles 的所有資訊:由 dpkg 管理的配置文件以獲取更多詳細資訊。

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