Я пытаюсь написать скрипт завершения 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