【原创】解决git hook之shell脚本中无法使用read读取输入流的问题

blogdaren 2021-09-12 抢沙发 39人次

问题背景:

项目中有个主文件声明有项目的版本号,显然这个版本号随着项目进度需要频繁手动修改,这就造成每次提交时可能会忘记修改版本号,而且手动修改也很麻烦,所以作者想到了使用git hook来解决这些问题,但是编写过程中发现hook脚本中无法使用read读取输入流

解决方案:

1. 利用git hook的 commit-msg脚本来自定义处理逻辑;

2. 利用 exec < /dev/tty 来解决输入流无法读取的问题;

样板代码:

#!/bin/sh

TARGET="/path/to/file"

clear;
echo "=====================================================";
git status
echo "=====================================================";
echo "1: 放弃提交 2: 修改版本并继续提交 3: 不改版本继续提交";
echo "=====================================================";

version_line=`egrep "const.*CURRENT_VERSION.*=.*'.*'" $TARGET`;
last_version=`echo $version_line | egrep -o "[0-9].*[0-9].*[0-9]"`;


#exec < /dev/tty 这行必须要有, 否则输入流无法工作
exec < /dev/tty 
read -p ">> please choose number: " number


if [ "$number" = 1 ]; then 
    echo -e "\n<< ******************cancel commit********************\n";
    exit 1;
elif [ "$number" = 2 ]; then 
    echo -e ">> show current version: $last_version";
    read -p ">> please input version: " version
    `sed -i "s/const.*CURRENT_VERSION.*=.*'.*';/const  CURRENT_VERSION = '$version';/g"  $TARGET`
    `git add $TARGET`
elif [ "$number" = 3 ]; then 
    echo -e ">> show current version: $last_version\n";
    exit 0;
else 
    echo -e "\n<< *****************invalid number*******************\n";
    exit 1;
fi 

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】解决git hook之shell脚本中无法使用read读取输入流的问题

发表评论:

您的昵称:
电子邮件:
个人主页:

Free Web Hosting