我是怎麼解決的

我是怎麼解決的

我使用的是 Debian Jessie 8.6。我注意到,apt-get當按套件和命令的選項卡時,會得到預期的 bash 自動完成,但當嘗試將其與它一起使用時,它apt不起作用。我記得使用的是 xubuntu 16.04,它可以工作,所以我覺得很奇怪,它在這裡不起作用。有沒有辦法apt也為命令啟用它?如果是這樣,怎麼辦?

答案1

Debian 沒有安裝和啟用「bash-completion」。

如果您是從 Ubuntu 背景進入 Debian 的,那麼它是預先安裝並預設啟用的,這可能會造成一些混亂。

若要啟用/「修復」此問題,請執行(以 root 身分):

apt-get install bash-completion

然後,你有兩個選擇。您可以:

 1. 為自己的每個使用者啟用它,或者

 2. 全域啟用。

1. 如果您只想為您的用戶啟用它,請編輯~/.bashrc- 添加以下內容:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi

要在不登出並重新登入的情況下嘗試它,請執行:

    . ~/.bashrc

或打開一個新的外殼。然後嘗試使用 apt 來完成製表符補全。開頭的點和空格 ( .) 與 bash 中使用關鍵字相同source,但更可移植。

su如果您希望它在進入 root 帳戶時工作,請在 root 的主目錄中執行相同的操作(通常/root)。

2.若要全域啟用它,請從 (1) 在文件中/etc/bash.bashrc代替。

對於任何想知道為什麼會起作用的人來說,.前面的/etc/bash_completion確實不是引用目前目錄,因為它周圍有空格。相反,它使給定檔案的內容在目前運行的 shell 中計算,而不是在新的子 shell 中執行。這裡已經標準化了。

在 Bash 中,這.可以用 command 代替source,但這不是 POSIX 標準化的,而且可移植性較差,所以我傾向於引導人們不要使用它。在這種情況下,由於它是專門用於擴展 bash 的程序,而不是需要在 bourne shell 或 中工作的程序ksh,因此您可以隨意替換source可讀性。

順便說一句,這種行為(不打開子 shell)類似於 DOS/Windows .BAT 腳本正常工作的方式,改變它們運行的 shell 的狀態cd。當腳本退出時,您不會像在.BAT 中那樣位於該路徑中。

答案2

在 Debian 9 Stretch 中,只需編輯 /etc/bash.bashrc 並取消註釋:

# enable bash completion in interactive shells
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

答案3

我是怎麼解決的

wget我在嘗試自動完成時遇到了自動完成問題,我設法通過從下面的蒼蠅中apt-get install wg[TAB][TAB]刪除參數來解決它:--no-generate

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

值得一提的是,這些檔案只有在安裝後才可使用bash-completion

我所指的參數--no-generate可以在下面的行中看到,但我 --no-generate不僅從這一行中刪除了 ALL : https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28

我是怎麼走到這一步的?

set -v我在運行previous to後到達了這一點apt-get install wg[TAB][TAB],這表明執行的命令是:

apt-cache --no-generate pkgnames wg

輸出是一個錯誤:

E: Could not open file  - open (2: No such file or directory)

當我在apt-cache pkgnames wg沒有執行的情況下執行時--no-generate,我正確地獲得了自動完成清單:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

希望這可以幫助。

答案4

將此設定檔從 Ubuntu:/usr/share/bash-completion/completions/apt 複製到 Jessie 中的相同目錄。您也可以在此處取得該文件:http://pastebin.com/PRBMt3an

相關內容