我很好奇要知道为什么终端崩溃了。我有一个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键之后,终端仍然关闭。
答案 0 :(得分:3)
exec
命令用新的bash进程的图像替换当前正在运行的bash进程的图像,该映像将在$POST_PUSH
中运行脚本。因此,该脚本退出时,该过程将完成运行。它永远不会回到您开始的bash进程中,就像脚本在子shell中运行一样。
如果要替换,则行
exec "$POST_PUSH" "$BRANCH" "$@"
使用
"$POST_PUSH" "$BRANCH" "$@"
您将实现自己想要的。