Re: [PATCH 1/3] completion: fix alias listings with newlines
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- Oct 7, 2009, 09:33 UTC
- Message-ID
- <4ACC6055.1070204@viscovery.net>
- In-Reply-To
- <1254905331-29516-1-git-send-email-bebarino@gmail.com>
Stephen Boyd schrieb:
Show 12 quoted lines
> __git_aliases ()
> {
> - local i IFS=$'\n'
> - for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
> - i="${i#alias.}"
> - echo "${i/ */}"
> + local i
> + git --git-dir="$(__gitdir)" config -z --get-regexp "alias\..*" 2>/dev/null |
> + while IFS= read -rd '' i; do
> + echo ${i#alias.} | cut -d' ' -f1
> done
> }Is it necessary to change the body of the loop? Your version spawns two processes on each iteration, while the original spawned no processes.
You can avoid the pipeline (i.e. yet another process) using a "here-string":
local i aliases=$(git --git-dir="$(__gitdir)" config -z \
--get-regexp "alias\..*" 2>/dev/null)
while IFS= read -rd '' i; do
i="${i#alias.}"
echo "${i/ */}" # could be: echo "${i%% *}"
done <<< "$aliases"but I don't know how well bash handles variable values with embedded NULs.
-- Hannes