help-make
[Top][All Lists]
Advanced

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

Re: shell


From: Philip Guenther
Subject: Re: shell
Date: Sun, 10 Sep 2006 15:32:25 -0600

On 9/10/06, Louis-David Mitterrand <address@hidden> wrote:
I'm trying to get this rule to work:

        id3tag:
                echo mp3/blues/john_lee_hooker/boom_boom/ | IFS=/ read form genre artist album 
&& echo "$$form $$genre $$artist $$album"

but it echoes nothing.

Normally, the various commands in a pipeline are all executed in
separate processes.  Some shells will handle the last command of the
pipeline in the original process if it's a 'read', but last I checked
that was not required by the POSIX standard.

So, it appears that the shell used by make by default (/bin/sh)
doesn't do that special handling.  There are a number of workaround,
the simplest being to make the 'last command of the pipeline' contain
not just the 'read' but also the commands that need the variable
values.  That can be done by grouping them into a subshell with
parens:

id3tag:
       echo mp3/blues/john_lee_hooker/boom_boom/ | \
           ( IFS=/ read form genre artist album && \
             echo "$$form $$genre $$artist $$album" )


When issued from a shell it works.

Apparently your login shell performs that special handling, at least
when used interactively.


Philip Guenther




reply via email to

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