我正在尝试编写一个bash完成脚本,该脚本可以调用某个工具,该工具有时需要用户输入密码和验证者令牌。
似乎任何等待完成脚本中输入的尝试都会导致会话无限期挂起。我对read
的行为相同,因此我用了一个代码示例。如果您单独调用thing_that_waits
函数,则read
和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