cd + bash完成脚本


1

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

现在我要输入终端:

webs str{TAB}

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

您将如何实现此功能?一些聪明的别名?功能在.bashrc?脚本?

一些聪明的别名?

Answers:


4

您将需要两个伙伴。,完成脚本:

_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

_get_cword取决于要安装的bash-completions软件包。如果没有,请更改以下行:

cur=$(_get_cword)

至:

cur=${COMP_WORDS[$COMP_CWORD]}

,功能:

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

谢谢。以此为起点,我设法完成了我需要做的事情。
Takehin 2010年

2

我不确定这是否是您需要的...

在航站楼...

sudo vim /etc/inputrc

找到以下行并取消注释:

# alternate mappings for “page up” and “page down” to search the history

#”\e[5~”: history-search-backward

#”\e[6~”: history-search-forward

现在您可以上下翻页来自动完成历史记录中的命令


1

我将为此创建一个自定义bash自动完成脚本。看一下/etc/bash_completion.d目录及其众多示例。然后创建一个名为webs该目录的文件,并使其适应您的需求。


0

如果我错了,请纠正我,但是我认为这正是为Lightning创造的。这是一个Ruby项目,因此如果使用Bash本身就是目标,那么这不是一个很好的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.