终端中文件名中间部分匹配的自动完成(破折号/bash)

som*_*his 5 command-line unity-dash 12.04

我有一堆目录:

20130118-Cars_Directory
20130118-Bikes_Directory
20130218-Planes_Directory
20130228-Scooters_Directory
Run Code Online (Sandbox Code Playgroud)

有没有办法以在命令中间键入部分匹配项的方式更改目录。

理想情况下,样式为cd *Bikes*<TAB>,并让 dash 自动完成其余部分?

des*_*gua 5

您可以通过为 cd 创建别名并根据您的意愿定义 bash 完成来实现。参见巴赫完成手册

这是分步指南。对于我们的新命令,我将使用“scd”,但您也可以使用“cd”。

1) 编辑 .bashrc 文件

gedit ~/.bashrc  
Run Code Online (Sandbox Code Playgroud)

2)创建别名将其
粘贴到“.bashrc”文件的最后:

# Alias for making a "Super cd"

alias scd="cd"

_scd_completion() {
    mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _scd_completion scd
Run Code Online (Sandbox Code Playgroud)

保存并关闭。

3)打开一个新终端
或运行: source ~/.bashrc

4) 使用方法

只需调用该命令,后跟您要访问的目录的部分名称即可。

scd Bikes<TAB>

完毕。享受!


som*_*his 3

事实上,巧合的是,事实证明cd *Bikes*<RETURN>无需对系统进行任何更改即可工作。

我只是有点惊讶它不需要引号*Bikes*