GitHook中的Bash选项菜单
我想在开发人员切换分支时显示bash菜单。 我已经创建了一个像这样的签出后钩子GitHook中的Bash选项菜单,git,bash,Git,Bash,我想在开发人员切换分支时显示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=$options
#!/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
它给了我一份菜单。
但是当这个钩子在切换分支后执行时,它不会等待某人输入值,而是在显示菜单后,脚本结束
关于如何解决这个问题有什么想法吗?无论出于何种原因,
签出后
将其标准输入连接到/dev/null
,因此选择
立即无法读取任何输入。(我在任何地方都找不到这方面的文档,但可以使用strace
进行确认)一种解决方案是直接从终端重定向标准输入:
select opt in "${options[@]}"
do
...
done < /dev/tty
选择opt-in“${options[@]}”
做
...
完成