从bash脚本调用git hook后,如何防止终端关闭?

时间:2019-03-28 21:11:35

标签: bash git

我很好奇要知道为什么终端崩溃了。我有一个bash函数gc_push_wh,它像这样调用git钩子:

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别名运行时,终端不会关闭。

重要提示:我尝试在钩子末尾抛出一个读取命令,但是在按Enter键之后,终端仍然关闭。

1 个答案:

答案 0 :(得分:3)

exec命令用新的bash进程的图像替换当前正在运行的bash进程的图像,该映像将在$POST_PUSH中运行脚本。因此,该脚本退出时,该过程将完成运行。它永远不会回到您开始的bash进程中,就像脚本在子shell中运行一样。

如果要替换,则行

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

使用

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

您将实现自己想要的。