Bash完成命令

时间:2012-08-18 14:59:31

标签: bash bash-completion

在我的功能中我有

# Tab completion
if [ "$1" = "--complete" ]; then
    shift
    # Commands
    for line in $(compgen -ac "notes_$1" | sed 's/^notes_//'); do
        echo $line
    done
    # Notes
    for line in $(cd $NOTES_DIR; ls $1* 2>/dev/null); do
        echo $line
    done
    return

这应该列出所有以notes_开头的命令和某些目录中的所有文件,并且在调用notes --complete时执行。但是,当我尝试使用标签完成时

complete -C 'notes --complete "$COMP_LINE"' notes

它只显示文件而不是命令?

1 个答案:

答案 0 :(得分:1)

添加

echo "--$1--"

shift

问题在于

compgen -ac "notes_$1"

内容不是您所期望的

我猜 $ 1 当你做笔记

$ notes <TAB>

PATH

中没有notes_notes *别名或命令

检查添加别名notes_notesWHATEVER并再次尝试自动完成