linux – 自定义bash完成的提示

我正在开发一个自定义bash完成命令来从调度系统(LSF,PBS,SLURM)捕获作业ID.我已经掌握了基本功能,但是现在我想用运行zsh时看到的“提示”来扩展它.

例如,当我在下面的grep示例中按TAB时,我得到:

grep -<TAB>
     --after-context          -A           -- specify lines of trailing context
     --basic-regexp           -G           -- use basic regular expression
     --before-context         -B           -- specify lines of leading context
...

之后的第三列 – 是我想要添加到我自己的bash完成中的内容.它的正确技术术语是什么?提示? compgen是否提供了这样做的功能?

我附上我当前的工作示例,仅提供ID.该示例使用LSF.

# LSF Job ID completion
function _mycurrentjobs()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(bjobs -noheader -u $USER -o JOBID)" -- $cur))
    return 0
}
complete -F _mycurrentjobs bkill bjobs bstatus bpeek bstop bresume

提供ID和我想要的提示的命令是:
bjobs -noheader -u $USER -o“JOBID JOB_NAME”

解决方法

在审查了关于主机完成 bash autocompletion: add description for possible completions的类似帖子后,我或多或少得到了正确的行为.我正在使用 – 作为我的job id查询命令中的分隔符

function _mycurrentjobs()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local OLDIFS="$IFS"
    local IFS=$'\n'
    COMPREPLY=( $(compgen -W "$(bjobs -noheader -u $USER \
        -o "JOBID JOB_NAME delimiter='-'")" -- $cur))
    IFS="$OLDIFS"
    if [[ ${#COMPREPLY[*]} -eq 1 ]]; then   #Only one completion
        COMPREPLY=( ${COMPREPLY[0]%%-*} )   #Remove the separator and everything after
    fi
    return 0
}
complete -F _mycurrentjobs bkill bjobs bstatus bpeek bstop bresume

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...