【问题标题】:Unable to get input from user in shell script which is called by git hook pre-push script无法在 git hook pre-push 脚本调用的 shell 脚本中从用户那里获取输入
【发布时间】:2019-06-17 16:19:11
【问题描述】:

我正在从另一个 git-hook pre-push 的 shell 脚本运行一个 shell 脚本。

这是.git/hooks/pre-push的内容:

#!/usr/bin/env bash

protected_branch='master'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]; then
    sh test.sh
    if [ $? != 0 ]; then
        echo "Error"
        exit 1
    fi
else
    exit 0
fi

这是test.sh的内容:

#!/bin/bash
run_base=1
    run_test () {
        read -p "enter varname: " varname
        echo $varname
    }
time {
        if [ "$run_base" = "0" ] ; then 
            echo "skipped"
        else 
            time { run_test ; }
            echo "run_test done";
        fi
}

如果我直接运行pre-push 脚本,那么它可以正常工作,但是当我执行git push origin master 并且pre-push 会自动触发时它不起作用。

当我触发pre-push 钩子脚本时,test.sh 中的read 没有被执行。为了在test.sh(从pre-push 调用)中执行read,我是否需要做任何特定的事情?

【问题讨论】:

    标签: linux bash shell scripting githooks


    【解决方案1】:

    我只是在我的电脑上测试它,它运行良好, isoto@hal9014-2 ~/w/test> ./pre-push 输入变量名:asd asd

    真正的 0m1.361s 用户 0m0.000s 系统 0m0.000s run_test 完成

    真正的 0m1.361s 用户 0m0.000s 系统 0m0.000s

    所以,我唯一做的就是添加可执行权限,chmod +x * 而且我将两个脚本放在同一个目录中,除了一切都应该工作。

    【讨论】:

    • 如果我直接执行 pre-push 脚本,那么我看不到任何问题,当我执行 git push origin master 时会看到这个问题,它会自动触发 pre-push 脚本。
    【解决方案2】:

    找到答案了,我只好在read末尾加上< /dev/tty

    read -p "enter varname: " varname < /dev/tty
    echo $varname
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 2018-11-27
      • 1970-01-01
      相关资源
      最近更新 更多