[Top][All Lists]
[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
- shell, Louis-David Mitterrand, 2006/09/10
- Re: shell,
Philip Guenther <=
- Re: shell, Louis-David Mitterrand, 2006/09/10
- Message not available