Process substitution into loop

Steve Langasek steve.langasek at ubuntu.com
Fri Jun 10 04:05:45 UTC 2011


On Fri, Jun 10, 2011 at 03:53:15AM +0000, Grail Dane wrote:
> Just wondering, as I can't find by googling, if it is at all possible to
> do a processsubstitution into a while loop within an upstart script?

> Example:
> while read -r DEVICE
> do
>    ip link set dev $DEVICE up
> done< <(ip link | awk '/^[0-9]/ && !/UP/ && gsub(/:/,""){print $2})

> When issuing the start command on the script I get:
> /proc/self/fd/10: line 6: syntax error near unexpected '<'init:
> network-interfaces main process (1367) terminated with status 2start: Job
> failed to start Would appreciated if someone would identify if i have done
> something wrong or if this not a supported feature?

The <() syntax is not part of the POSIX standard, it's a bash extension.
Upstart uses /bin/sh to interpret scripts, as is customary; chances are
you're running on a system where /bin/sh is not bash, and as a result this
syntax is not supported.

A supported syntax would be:

  ip link | awk '/^[0-9]/ && !/UP/ && gsub(/:/,""){print $2}' |
  while read -r DEVICE
  do
      ip link set dev $DEVICE up
  done

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
slangasek at ubuntu.com                                     vorlon at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 828 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/upstart-devel/attachments/20110609/190057d0/attachment.pgp>


More information about the upstart-devel mailing list