Как предотвратить закрытие терминала после вызова git hook из скрипта bash? - PullRequest
0 голосов
/ 29 марта 2019

Мне любопытно узнать и узнать, почему происходит сбой терминала.У меня есть функция bash, gc_push_wh, которая вызывает git hook так:

git_push_wh () {
  GIT_DIR_="$(git rev-parse --git-dir)"
  BRANCH="$(git rev-parse --symbolic --abbrev-ref $(git symbolic-ref HEAD))"

  git push "$@"

  POST_PUSH="$GIT_DIR_/../hooks/post-push"
  test $? -eq 0 && test -x "$POST_PUSH" &&
  exec "$POST_PUSH" "$BRANCH" "$@"
}

Все это прекрасно работает.Но когда крюк заканчивается, терминал закрывается.Вот что в ловушке:

#!/usr/bin/env bash

ssh -t root@10.0.0.222 -p 30000 "cd ~/.dotfiles; git pull; lb;"

У меня есть псевдоним git, настроенный для работы с этой функцией, например:

git gcpush

При запуске сgit alias, терминал не закрывается.

ВАЖНО: Я попытался сгенерировать команду чтения в конце ловушки, но после нажатия кнопки ввода терминал все еще закрывается.

1 Ответ

3 голосов
/ 29 марта 2019

Команда exec заменяет образ текущего запущенного процесса bash изображением нового процесса bash, который запустит сценарий в $POST_PUSH. Следовательно, процесс завершится, когда этот скрипт завершится. Он никогда не вернется к процессу bash, с которого вы начали, как это случилось бы, если бы скрипт запускался в подоболочке.

Если заменить, строка

  exec "$POST_PUSH" "$BRANCH" "$@"

с

  "$POST_PUSH" "$BRANCH" "$@"

ты достигнешь того, чего хочешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...