Bash
在 bash 中使用萬用字元自動完成 cd
在 ubuntu (debian jessie/sid) 上使用 bash 我不知道為什麼我不能使用內置命令對萬用字元進行製表符補全。
例如,假設我目前的工作目錄包含以下子目錄..
% ls -l drwxr-xr-x 2 userX 4096 2016-08-31 11:46:40 0830a/ drwxr-xr-x 2 userX 4096 2016-08-31 11:46:52 0830b/ drwxr-xr-x 2 userX 4096 2016-08-31 11:47:33 0831a/ drwxr-xr-x 2 userX 4096 2016-08-31 11:47:18 0831b/ drwxr-xr-x 2 userX 4096 2016-08-31 11:50:38 z0830z/
我能打
$$ tab $$輸入’ls -l *31a’並完成後..
ls -l *31a<tab>
完成到..
ls -l 0831a
但是,如果我嘗試使用內置的“cd”命令進行相同操作,它將無法完成..
cd *31a<tab>
..不會完成
此外,使用尾隨萬用字元也會失敗..
cd z*<tab>
..不會完成
有趣的是,沒有萬用字元的補全對於內置函式來說是可以的。例如,我能夠使這個完成工作正常:
cd z<tab>
完成到..
cd z0830z/
此外,我可以按原樣使用“cd *31a”命令並讓它成功(只要它是唯一的)。但我希望擴展發生,所以我確定我要進入什麼。
我的 .inputrc 包含這個..
$if Bash Space: magic-space set mark-directories on set mark-symlinked-directories on set completion-ignore-case off set show-all-if-ambiguous on $endif
我沒有 ~/.bash_completion 文件。我確實有 /etc/bash_completion,它只做 /usr/share/bash-completion/bash_completion 的來源。後一個文件有點長,所以我不會在這裡包含它。
我的最終目標是能夠為 cd 命令完成萬用字元完成工作。
我正在與同樣的問題作鬥爭。正如@Gilles 提到的,目前沒有真正的基於 bash 的解決方案。
由於
bash-completion
並沒有真正添加太多功能cd
(AFAIK 僅使用$CDPATH
目錄),所以如果您不使用它,那麼您可以將其添加到您的~/.bashrc
:compopt -o bashdefault cd
這會將
cd
完成的行為重置為預設值(萬用字元完成的工作),並且不會更改任何其他內容。