簡體   English   中英

Bash中的自定義路徑完成

[英]Custom path completion in Bash

我想為自己的文件系統編寫一個bash_completion腳本。 我有客戶端程序,它向一些數據庫發送查詢。

例:

my_prog --ls db_name:/foo/bar/

此命令寫入db_name:/foo/bar文件夾中的stdout文件列表。

我想為此啟用自動完成功能。 因此,當我按Tab鍵時,它會顯示選項列表。

my_prog --ls db_name:/foo/bar/<tab>

但在這種情況下,當我按Tab鍵並且有單個選項時它會替換當前輸入的路徑,所以我得到了這個:

$ my_prog --ls db_name:/foo/bar/<tab>
$ my_prog --ls file

但我希望將匹配添加到輸入路徑的末尾。

這是我的完成功能:

__complete_path()
{
    COMPREPLY=()

    if [[ ${1} == "" ]]
    then
        COMPREPLY=( "/" )
        compopt -o nospace
        return
    fi

    base=${1##*/}
    dir=${1%/*}

    options="my_prog --ls ${db}:${dir}"
    COMPREPLY=( $(compgen -W "${options}" -- ${base} ) )

    compopt -o nospace
}

我在嘗試類似的東西時找到了這個帖子。 這個 stackexchange帖子幫助我將自動完成功能放在一起。 它不像“正常”自動完成那樣顯示完整路徑,但您可能會發現它很有用。

_complete_func()
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    if [ $COMP_CWORD -eq 1 ]; then
    opts="some options for the program"
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    elif [ $COMP_CWORD -ge 2 ]; then
    local files=("${cur}"*)
        COMPREPLY=( "${files[@]}")
fi
}
complete -o nospace -F complete_func command_to_autocomplete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM