cd + bash补全脚本

tak*_*hin 1 ubuntu bash command-line-interface

我有网络项目/var/www/projects/some/long/path/strange-project-name

现在我想在终端输入:

webs str{TAB}
Run Code Online (Sandbox Code Playgroud)

它应该自动完成webs strange-project-name(基于ls /var/www/projects/some/long/path/),并且在执行命令后,pwd应该指向项目路径。cd strange-project-name自动完成功能有点智能

您将如何实现此功能?一些智能别名?函数在.bashrc? 脚本?

一些智能别名?

Den*_*son 5

你需要一个两人合作的人。、补全脚本:

_webs() {
    local cur prev projdir=/var/www/projects/some/long/path

    COMPREPLY=()
    cur=$(_get_cword)
    prev=${COMP_WORDS[COMP_CWORD-1]}

    COMPREPLY=( $( compgen -W '$( command ls "$projdir/$cur*" | sed "s|$projdir/||")' -- '' ) )
}
complete -F _webs webs
Run Code Online (Sandbox Code Playgroud)

_get_cword取决于正在安装的 bash-completions 包。如果没有,请更改该行:

cur=$(_get_cword)
Run Code Online (Sandbox Code Playgroud)

到:

cur=${COMP_WORDS[$COMP_CWORD]}
Run Code Online (Sandbox Code Playgroud)

、一个函数:

webs () {
    local projdir=/var/www/projects/some/long/path
    cd "$projdir"
    do_something_ "$@"
}
Run Code Online (Sandbox Code Playgroud)