jay*_*oby 5 git ssh bash hook tty
每当我们推送master时,我都有一个post-receive钩子来部署我们的master分支.
我想使部署可选; 钩子要求简单的Y/N响应来实现这一点; 下面的bash伪代码:
echo "Should I deploy this code now? Enter Y/N"
read deploy_code
case ${deploy_code} in
"Y") do_a_deploy ;;
"N") exit ;;
*) # ask the question again if not Y or N ;;
esac
Run Code Online (Sandbox Code Playgroud)
由于post-receive钩子在stdin上获取其参数的方式,该 read 行不会暂停用户的输入,并且脚本循环遍历尝试获得Y/N答案.
我认为特别要求来/dev/tty解决这个问题;
read deploy_code < /dev/tty
Run Code Online (Sandbox Code Playgroud)
但这仍然导致脚本无休止地循环,因为输入不是来自键盘.
在这种情况下,实际上是否可以获得键盘输入?
编辑:
啊.看起来它实际上是责备.现在看输出我添加了 < /dev/tty 我看到/ dev/tty:没有这样的设备或地址
如果我在本地运行脚本,我可以模仿这个,但是通过ssh:
ssh 127.0.0.1 "echo 40913e300c8bf4ed7ea91b5ef61a522f3be2c05f e2aabfc865547d8b494b76c96947bab0c62acfec refs/heads/master | /path/to/post-receive"
Run Code Online (Sandbox Code Playgroud)
编辑2:
所以我可以将-t选项设置为ssh,以便在ssh会话中根据启用tty请求tty,或者我可以在每个密钥的基础上在服务器上的authorised_keys文件中启用它
编辑3:
创建〜/ bin/ssh -t之后
#!/bin/sh
ssh -tt "$@"
Run Code Online (Sandbox Code Playgroud)
(双-t选项强制tty)并设置GIT_SSH指向它,我现在得到可怕的致命:协议错误:错误的行长度字符:后跟005我猜是.bash_profile中的东西或类似的回声之前git有机会跑
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |