unix 个人脚本上的自动完成bash v3

5gfr0r5j  于 2023-03-29  发布在  Unix
关注(0)|答案(1)|浏览(140)

我有一个关于bash -v 3的脚本,如下所示:

#!/bin/bash

# Menu di esempio
menu() {
    case $1 in
        frontend)
            echo "Updating frontend"
            ;;
        *)
            echo "Invalid option. Try again."
            ;;
    esac
}

# Esegui il menu
while true; do
    read -p "Type an option: " input # I wish to have autocompletition here
    menu "$input"
done

我希望插入自动完成功能,就像我在macOS上的标准终端一样。
有什么解决办法吗?

5lhxktic

5lhxktic1#

你可以在bash的read中使用-e来启用readline,但它会自动完成文件名和命令行,因此你可能需要将选项模拟为文件。

#! /bin/bash

autocomplete_input() {
    local -r opts=( "$@" )
    (
        readonly temp=$(mktemp -d /tmp/myreadline.XXXX)
        cd "$temp"
        trap "rm -rf $temp" EXIT
        touch "${opts[@]}"
        read -e -p "Type an option: " input # I wish to have autocompletition here
        printf '%s\n' "$input"
    )
}

input=$(autocomplete_input "frontend" "other option" "quit")

然后,当input被读取时,您可以键入,例如f+TAB,它将自动完成为frontend等等。

相关问题