From: Stefan Näwe Date: Wed, 26 Oct 2011 06:52:03 GMT Subject: Re: [PATCH] completion: fix issue with process substitution not working on Git for Windows Message-ID: In-Reply-To: <4EA71E8C.8010704@kdbg.org> Am 25. Oktober 2011 22:39 schrieb Johannes Sixt : > Am 25.10.2011 20:01, schrieb Stefan Naewe: >> Git for Windows comes with a bash that doesn't support process substitution. >> It issues the following error when using git-completion.bash with >> GIT_PS1_SHOWUPSTREAM set: >> >> $ export GIT_PS1_SHOWUPSTREAM=1 >> sh.exe": cannot make pipe for process substitution: Function not implemented >> sh.exe": cannot make pipe for process substitution: Function not implemented >> sh.exe": <(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n '): ambiguous redirect >> >> Replace the process substitution with a simple "echo $var | while...". >> >> Signed-off-by: Stefan Naewe >> --- >>  contrib/completion/git-completion.bash |    4 +++- >>  1 files changed, 3 insertions(+), 1 deletions(-) >> >> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash >> index 8648a36..926db80 100755 >> --- a/contrib/completion/git-completion.bash >> +++ b/contrib/completion/git-completion.bash >> @@ -110,6 +110,8 @@ __git_ps1_show_upstream () >>       local upstream=git legacy="" verbose="" >> >>       # get some config options from git-config >> +     output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" >> +     echo "$output" | \ >>       while read key value; do >>               case "$key" in >>               bash.showupstream) >> @@ -125,7 +127,7 @@ __git_ps1_show_upstream () >>                       upstream=svn+git # default upstream is SVN if available, else git >>                       ;; >>               esac >> -     done < <(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ') >> +     done >> >>       # parse configuration values >>       for option in ${GIT_PS1_SHOWUPSTREAM}; do > > Are you sure that the result still works as intended? The while loop > sets a few variables. When you place it in a pipe, the loop runs in a > subshell, and subsequent code will not see the modified values. Unless > bash knows how to optimize away the subshell, that is. I doesn't work in the 'git svn' case, I guess. > OTOH, when you use while ...; do ...; done < <(...), the while loop is > not in a subshell. > > An alternative is to use:  while ...; do ...; done <<< "$output" I'll try that. > BTW, you don't need to protect the end-of-line with a backslash if the > line ends with the pipe symbol. OK. Will do. > -- Hannes Thanks, Stefan -- ---------------------------------------------------------------- python -c "print '73746566616e2e6e6165776540676d61696c2e636f6d'.decode('hex')"