Работает ли команда read в скрипте завершения bash? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь написать скрипт завершения bash, который вызывает инструмент, который иногда требует ввода пользователем пароля и токена аутентификатора.

Кажется, что любая попытка ожидания ввода в моем скрипте завершения приводит к зависанию сеанса на неопределенное время. У меня было такое же поведение с read, поэтому я сделал пример кода с ним. Если вы вызываете функцию thing_that_waits самостоятельно, то read s и echo ведут себя как ожидалось. Если вы попробуете ttw<TAB><TAB>, будет напечатан текст первого чтения, но затем сеанс зависнет на неопределенное время.

Я получил те же результаты на bash 5.0.7 и 3.2.57.

#!/usr/bin/env bash

thing_that_waits()
{
    read -p "password" pw
    read -p "token" token
    echo "$pw and $token"
}

_ttw_completions()
{
    local cur
    cur=${COMP_WORDS[COMP_CWORD]}
    case "$cur" in
        -*)
            COMPREPLY=( $( compgen -W '-a -b -c' -- "$cur") )
            ;;
        *)
            thing_that_waits
            COMPREPLY=( $( compgen -W "d e f" -- "$cur" ) )
            ;;
    esac
}

complete -F _ttw_completions ttw
...