bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to deal with space in command line?


From: Sven Mascheck
Subject: Re: How to deal with space in command line?
Date: Sat, 9 Oct 2010 00:06:21 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

On Mon, Sep 20, 2010 at 09:14:15AM -0400, Greg Wooledge wrote:

> The disadvantage of -exec is that if you wanted to do something within
> your shell (putting the filenames into an array, incrementing a counter
> variable, etc.), you can't.  You're already two processes removed from
> your shell.  Likewise, you can't -exec a shell function that you wrote.
> You would have to use a separate script, or write out the shell code in
> quotes and call -exec sh -c '....'.

Although sh -c '' is not the same shell instance/environment anymore,
I would keep it in mind as very useful and flexible in many cases.


> For example, if we wanted to do vi `find . -name '*.c'` but actually have
> it WORK in the general case, we end up needing this monstrosity:
> 
> unset array
> while IFS= read -r -d '' f; do array+=("$f"); done \
>   < <(find . -name '*.c' -print0)
> vi "${array[@]}"
> 
> ... which uses three bash extensions and one BSD/GNU extension.  To the
> best of my knowledge, the task is completely impossible in strict POSIX.
> (You can work around the -print0 by using -exec printf '%s\0' {} + but
> then there's no way to read the NUL-delimited stream, and no arrays
> to put it into, as you cannot set positional parameters individually.)

As you mention -exec yourself, what about simply

find . -type f -name '*.c' -exec sh -c 'vi "$@"' find-sh {} +



reply via email to

[Prev in Thread] Current Thread [Next in Thread]