当开发人员切换分支时,我想预先显示一个bash菜单。 我已经创建了一个这样的结帐后挂钩
#!/usr/bin/env bash
options=("Quit" "Option 1" "Option 2" "Option 3" )
optionsprompt='Please enter your choice: '
sub1=("Option 1 sub 1" "Option 1 sub 2")
sub1prompt='Please enter your choice: '
PS3=$optionsprompt
select opt in "${options[@]}"
do
case $opt in
"Quit")
break
;;
"Option 1")
echo "you chose choice 1"
PS3=$sub1prompt
select sub1opt in "${sub1[@]}"
do
case $sub1opt in
"Option 1 sub 1")
echo "you chose choice 2"
;;
"Option 1 sub 2")
echo "you chose choice 2"
;;
esac
done
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 2")
echo "you chose choice 3"
;;
*) echo invalid option;;
esac
done
当我手动执行此挂钩时
./post-checkout
它按预期向我展示了一个菜单。
但是当在切换分支后执行此挂钩时,它不会等待某人输入值,但在显示菜单后,脚本结束。
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
无论出于何种原因,post-checkout
的标准输入已连接到/dev/null
,因此select
无法立即读取任何输入。 (我无法在任何地方找到此文档,但能够使用strace
确认。)一种解决方案是简单地从终端重定向标准输入:
select opt in "${options[@]}"
do
...
done < /dev/tty