Скрипт sh shell на windows вызывает ошибку: / dev / tty: нет такого устройства или адреса - PullRequest
0 голосов
/ 05 февраля 2019

В Windows в git commit-msg я хочу запустить следующий скрипт:

MSG="$1"
if ! grep -s -qE "#[0-9]" "$MSG";then
    exec < /dev/tty
    cat "$MSG"
    echo "Your commit message does not contain a reference to a work item. Continue? [y/n]"
    read -s -n 1 sure
    if [[ $sure == "y" ]]; then
        exit 0
    else
        echo "Aborting commit..."
        exit 1
    fi
fi

Он работает нормально, когда я использую расширения Git.

Но когда я хочу зафиксировать напрямую изVisual Studio (Team Explorer или Git Changes) возникает ошибка со следующим сообщением:

Your git-hook, '.git/hooks/commit-msg' (line 23) is not supported, likely because it expects interactive console support./r/nSee your administrator for additional assistance.

Мой вопрос: Есть ли возможность проверить, является ли exec </ dev/ tty </em> можно выполнить?В противном случае я просто напечатал бы соответствующее сообщение.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете использовать if [ -t 1 ] или if [ -t 2 ], чтобы проверить, находитесь ли вы в канале или в терминале.

if [ -t 1 ]; then    # or if [ -t 2 ]
   # do interactive stuff
else
   # non-interactive variant
fi

Ref: Как определить, выполняется ли мой сценарий оболочкитруба?

РЕДАКТИРОВАТЬ: OP сообщает, что [ -t 1 ] в моем исходном ответе не работает, но [ -t 2 ] работает.Первые тесты на stdout собираются на tty, а вторые тесты на stderr на tty.В этом случае я предполагаю, что и Git Extensions, и Visual Studio перехватывают стандартный вывод сценариев, но Git Extensions отправляет stderr в tty, а Visual Studio также перехватывает его.

...