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
标签:bash,linux,zsh,tab-completion,bash-completion 来源: https://codeday.me/bug/20190705/1390629.html