From: SZEDER Gábor Date: Fri, 15 May 2015 09:01:17 GMT Subject: Re: [PATCH v2] mergetools: add winmerge as a builtin tool Message-ID: <20150515110117.Horde.HyhfKlrEun2r-3mHUG3GSA1@webmail.informatik.kit.edu> In-Reply-To: Quoting Sebastian Schuberth : > On Thu, May 14, 2015 at 11:48 PM, SZEDER Gábor wrote: > >>> for directory in "$(env | grep -E >>> '^PROGRAM(FILES(\(X86\))?|W6432)=' | cut -d '=' -f 2 | sort -u)" >>> do >>> test -n "$directory" && >>> test -x "$directory/$winmerge_exe" && >>> echo "$directory/$winmerge_exe" && >>> break >>> done >> >> This ain't gonna work, because the output of the pipe won't be split >> because of the quotes around the command substitution, so $directory will >> hold everything. Simply loosing those quotes is not good either, because > > That's what I thought at first, too, but simply trying it out proved > me wrong (again, in both MSYS1/2): > > $ for d in "$(env | grep -Ei '^PROGRAM(FILES(\(X86\))?|W6432)=' | cut > -d '=' -f 2- | sort -u)"; do echo "$d"; done > C:\Program Files > C:\Program Files (x86) > > Note that the path, although they are containing spaces, are on > separate lines. Yeah, exactly the behavior I described in the part you quoted. Although it looks good, it's not what you want. Putting 'echo "** $d **"' in the loop gives me: ** C:\Program Files C:\Program Files (x86) ** (1.9.5 MSysGit) Gábor