Невозможно получить ввод от пользователя в скрипте оболочки, который вызывается скриптом git hook pre-push - PullRequest
0 голосов
/ 24 января 2019

Я запускаю сценарий оболочки из другого сценария оболочки, который является git-hook pre-push.

Это содержимое .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 запускается автоматически.

read в test.sh не выполняется, когда я запускаю скрипт подключения pre-push. Нужно ли делать что-то конкретное для выполнения read в test.sh, который вызывается из pre-push?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Нашел ответ, мне пришлось добавить < /dev/tty в конце read:

read -p "enter varname: " varname < /dev/tty
echo $varname
0 голосов
/ 24 января 2019

Я просто тестирую его на своем компьютере, и он отлично работает, isoto @ hal9014-2 ~ / w / test> ./pre-push введите varname: asd asd

реальный 0m1.361s пользователь 0m0.000ssys 0m0.000s run_test done

реальный пользователь 0m1.361s 0m0.000s sys 0m0.000s

Итак, единственное, что я сделал, - это добавил права на исполняемый файл, chmod + x * А такжеЯ поместил оба скрипта в один каталог, кроме того, все должно работать.

...