【问题标题】:Bash tab complete files in fixed directoryBash tab 完成固定目录中的文件
【发布时间】:2013-05-03 19:34:21
【问题描述】:

如何在脚本中的固定目录上使用 bash 制表符补全?假设我有一个目录 ~/pdf 包含 pdf 文件。我想制作一个简单的脚本来查看这些文件,例如viewpdf:

#! /bin/bash

evince $1

假设我在目录~/foo/bar 并写viewpdf ~/pdf/test.pdf,然后我可以查看文件。但是,我想在 ~/pdf 目录上使用 bash 选项卡完成,这样 viewpdf t <tab><tab> 会产生相同的结果。如何做到这一点?

【问题讨论】:

标签: bash tab-completion


【解决方案1】:

作为第一个近似值,您可以尝试下一个

_cmd() { COMPREPLY=($(ls ~/pdf/*.pdf)); }    
complete -F _cmd viewpdf

来源它,你可以使用

viewpdf <tab> #and will get the list of pdf files from the ~/pdf

如果你想要简单的 pdf 竞赛,

complete -f -X '!*.@(pdf|PDF)' viewpdf

【讨论】:

  • 谢谢,但我有几个 100 个 pdf 文件,所以我不想列出它们。我只想输入前三个字符,然后按 完成名称..
【解决方案2】:

根据jm666 的建议和Kevin 提供的链接,我现在可以使用以下代码:

_cmd() { 
    local cur files
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    files=$(ls ~/pdf/) 
    COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
}

请注意,ls ~/pdf/*.pdf 不起作用,因为它扩展为路径名而不是每个文件的文件名..

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多