首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compgen -o nospace选项无效果

compgen -o nospace选项无效果
EN

Unix & Linux用户
提问于 2022-09-09 21:27:09
回答 1查看 148关注 0票数 0

我正在尝试创建一个命令完成函数,并跟踪本指南。这大概就是它的样子:

代码语言:javascript
复制
function __my_completion ()
{
    local cur prev opts opts_log opts_import
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="-h --help -d --directory -v --version -l --log-level -q --quiet"
    opts_log="trace debug info warn err critical off"

    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
        COMPREPLY=( $(compgen -o nospace -d -W "${opts}" -- ${cur}) )
        return 0
    fi
    case "${prev}" in
        -d|--directory)
            COMPREPLY=( $(compgen -o nospace -d ${cur}) )
        ;;
        -l|--log-level)
            COMPREPLY=( $(compgen -W "${opts_log}" -- ${cur}) )
        ;;
    esac
}

complete -F __my_completion myProg

我的问题是:每当任何一个单词完成时,都会在末尾添加一个空格。对于普通选项来说,这是可以的,但它也可以通过目录完成,尽管使用了-o nospace -d选项组合。这是非常恼人的,因为它减慢了导航速度,而且非常不直观。

为什么是这样,我该如何纠正呢?

另外,当我在这里的时候,链接指南中的一个例子中的单个?是什么?就在队伍里

代码语言:javascript
复制
COMPREPLY=( $(compgen -f ? ${cur}) )
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-09-13 10:15:39

至少有一个部分解决方案:当compgen忽略-o nospace选项时,complete会尊重它。不幸的是,这意味着所有选项后面都添加了空格,或者none。下面是代码:

代码语言:javascript
复制
#/usr/bin/env bash

function __my_completion ()
{
    local cur prev opts opts_log
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="-h --help -d --directory -v --version -l --log-level -q --quiet"
    opts_log="trace debug info warn err critical off"
    local opts_dir=( $(compgen -d -S "/" -- ${cur}) )

    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ${opts_dir[@]} )
        return 0
    fi
    case "${prev}" in
        -d|--directory)
            COMPREPLY=( ${opts_dir[@]} )
        ;;
        -l|--log-level)
            COMPREPLY=( $(compgen -W "${opts_log}" -- ${cur}) )
        ;;
    esac
}

complete -o nospace -F __my_completion myProg

-S " "添加到其他选项也不会将空格添加回。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/716756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档