diff --git a/bin/git-changelog b/bin/git-changelog index dc27a8b1d..80cecf96b 100755 --- a/bin/git-changelog +++ b/bin/git-changelog @@ -317,7 +317,20 @@ _exit() { stty sane; echo; echo "caught signal, shutting down" IFS=$'\n' - pid_list=( $(pgrep -P $$) ) + # The format of `ps` is different between Windows and other platforms, + # so we need to calculate the total column number(COL_NUM) of header first. + # Why don't we just use the last column? + # Because the body of CMD column may contain space and be treated as multiple fileds. + pid_list=( $(ps -f | + awk -v ppid=$$ 'NR == 1 { + COL_NUM = NF + } + $3 == ppid { + # filter out temp processes created in this subshell + if ($COL_NUM != "ps" && $COL_NUM != "awk" && $COL_NUM !~ "bash$") + print $2 + }') + ) IFS="$defaultIFS" local _pid @@ -465,7 +478,10 @@ main() { rm -f "$tmpfile" else cp -f "$tmpfile" "$changelog" - [[ -n "$GIT_EDITOR" ]] && $GIT_EDITOR "$changelog" + # Use `eval` to handle GIT_EDITOR which contains space and options, + # like ""C:\Program Files (x86)\Notepad++\notepad++.exe" -multiInst ". + # Thanks @JanSchulz to inspire me this solution + [[ -n "$GIT_EDITOR" ]] && eval $GIT_EDITOR "$changelog" if [[ $? -ne 0 ]]; then _exit fi