Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > gnu.bash.bug > #15505
| From | "" <kfm@plushkava.net> |
|---|---|
| Newsgroups | gnu.bash.bug |
| Subject | Re: Command grouping |
| Date | 2019-10-13 10:54 +0100 |
| Message-ID | <mailman.475.1570960500.9715.bug-bash@gnu.org> (permalink) |
| References | <acdb21fe37e928c2063c95ec1d013fe695e3bdf1.camel@cyberfiber.eu> <06070f12-033d-0736-1733-a035629104cd@case.edu> <735ae0ed6542416188552545d16a02936070e493.camel@cyberfiber.eu> <20191013105449.45845e406ffc7cb4e1829ea2@plushkava.net> |
On Sun, 13 Oct 2019 10:09:26 +0200
Mischa Baars <mjbaars1977.bug-bash@cyberfiber.eu> wrote:
> On Sat, 2019-10-12 at 10:42 -0400, Chet Ramey wrote:
> > On 10/12/19 9:02 AM, Mischa Baars wrote:
> > > Hi,
> > >
> > > Perhaps to better have a look at this mail, than the previous mail.
> > >
> > > In trying to group commands, in this case compiler commands, I found some peculiarities while trying different combinations of the 'Internal Field
> > > Separator'
> > > and the 'Parameter Expansion' operator ${parameter@P}.
> >
> > I haven't looked at this in any depth, but you should realize that running
> >
> > declare IFS=$(printf ' \t\n')
> >
> > will result in IFS being set to space and tab, since command substitution
> > removes the trailing newline. Maybe that will make a difference.
> >
>
> Hi Chet,
>
> The bash manual page tells us that is the default value, nothing special.
>
> I was trying to remove the whitespace, such that whitespaces are allowed in project directory names, as was considered the default scenario as far as I know.
You are not removing the whitespace values from IFS. Instead, you are re-asserting the default value of IFS, only with \n missing (for the reason that Chet describes). Given that the output of your find command is newline-delimited, doing so will not end well. Writing IFS=$'\n' may function as you expected. However, this is an intrinsically broken approach to begin with. See https://mywiki.wooledge.org/DontReadLinesWithFor.
Instead, consider any of the following options:-
* find -exec or -execdir
* a for loop that iterates over a glob
* a while/read loop that consumes find's output (using -print0, ideally)
Your problems are compounded by failing to quote the expansion of i in the course of invoking gcc (lines 4-5), and by the flawed attempt at a workaround (lines 2 and 6-7). See https://mywiki.wooledge.org/BashFAQ/050. Not only that, but the *.c argument conveyed to find should be quoted, so as to inhibit pathname expansion.
Here is an example of how one might use for:-
shopt -s globstar
for i in ./pace/**/*.c; do
gcc -o "${i%.c}" "$i"
done
--
Kerin Millar
Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread
Re: Command grouping "" <kfm@plushkava.net> - 2019-10-13 10:54 +0100
csiph-web