Process substitution into loop

Grail Dane grail69 at hotmail.com
Wed Jun 15 00:25:45 UTC 2011


Hi James
Probably bad wording on my behalf.  Yes it was set prior to the configure being called.My exact entries are:
CFLAGS=-DSHELL='\"/bin/bash\"' ./configure --prefix=/usr --exec-prefix= --sysconfdir=/etcmakemake install
I have also exported the CFLAGS prior to the above and simply done configure, make and make install stepsbut both yield the same results as shown previously, ie that the script errors with unexpected tokenwhich implies that it is still running it as sh.
So so far it has only been the here document process working for me :(
cheersgrail

> Date: Tue, 14 Jun 2011 09:39:51 +0100
> From: james.hunt at canonical.com
> To: grail69 at hotmail.com
> CC: upstart-devel at lists.ubuntu.com
> Subject: Re: Process substitution into loop
> 
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 14/06/11 04:49, Grail Dane wrote:
> > Well, I can confirm that setting the interpreter to /bin/sh does not support process substitution as
> > I have run the following script
> > under both:
> > 
> > while read -r DEVICE
> > do
> >     echo ip link set dev $DEVICE up
> > done< <(ip link | awk '/^[0-9]/ && gsub(/:/,""){print $2}')
> > 
> > Under bash I get:
> > 
> > ip link set dev lo up
> > ip link set dev eth0 up
> > ip link set dev sit0 up
> > 
> > Under sh I get:
> > 
> > line 6: syntax error near unexpected token `<'
> > line 6: `done< <(ip link | awk '/^[0-9]/ && gsub(/:/,""){print $2}')'
> > 
> > I also have not been able to find a way to successfully implement the Cookbook option to change the
> > default shell.
> > To this end I mean that if I add the CFLAGS option prior to compiling,
> Hi Grail,
> 
> You need to set CFLAGS prior to running *configure* (before the compile). So, you will need to do:
> 
> export CFLAGS=...
> ./configure ...
> make
> 
> Regards,
> 
> James.
> 
> > the output once running:
> > 
> > start network-interfaces
> > 
> > Yields the same type of error as the script above:
> > 
> > /proc/self/fd/10: line 6: syntax error near unexpected token `<'
> > init: network-interfaces main process (27800) terminated with status 2
> > start: Job failed to start
> > 
> > I can confirm that the here document idea does work so I am left with the fact that the CFLAGS option
> > was some how no interpreted :(
> > 
> > Once compiled and installed is there any way to check what shell it thinks is the default?
> > 
> > Cheers
> > grail
> > 
> > ----------------------------------------------------------------------------------------------------
> > Date: Mon, 13 Jun 2011 18:15:20 -0700
> > Subject: Re: FW: Process substitution into loop
> > From: scott at netsplit.com
> > To: grail69 at hotmail.com
> > CC: upstart-devel at lists.ubuntu.com
> > 
> > Note the phrase *startup behaviour* in the paragraph - bash still supports bashisms in its scripts
> > when invoked as sh (after all, that's where the entire historical problem with them comes from)
> > 
> > On Mon, Jun 13, 2011 at 4:56 PM, Grail Dane <grail69 at hotmail.com <mailto:grail69 at hotmail.com>> wrote:
> > 
> >     Hi James
> > 
> >     Thanks very much for the reply.  As you can probably guess the typo is in the email but not in
> >     the actual script.  I did further testing and as per the bash install instructions:
> > 
> >     *sh*
> > 
> >     	
> > 
> >     A symlink to the *bash* program; when invoked as *sh*, *bash* tries to mimic the startup
> >     behavior of historical versions of *sh* as closely as possible, while conforming to the POSIX
> >     standard as well
> > 
> > 
> > 
> >     This would indicate that it is a bash builtin feature to use only POSIX compliant options.
> >     So from the Cookbook you may need to edit the following from the section you pointed me to:
> > 
> >     If you wish to change this, you can either make /bin/sh a symbolic link to your chosen shell
> > 
> >     As this does not work as expected in this case and it may be similar for other shells to.
> > 
> >     I will try the workaround of adding it as the default shell in the build and let you know how it
> >     goes :)
> > 
> >     Cheers
> >     grail
> > 
> >     > Date: Fri, 10 Jun 2011 11:22:12 +0100
> >     > From: james.hunt at ubuntu.com <mailto:james.hunt at ubuntu.com>
> > 
> >     > To: grail69 at hotmail.com <mailto:grail69 at hotmail.com>
> >     > CC: upstart-devel at lists.ubuntu.com <mailto:upstart-devel at lists.ubuntu.com>
> >     > Subject: Re: Process substitution into loop
> >     >
> >     > Hi Grail,
> >     >
> >     > On 10/06/11 05:46, Grail Dane wrote:
> >     > >
> >     > >
> >     > >> Date: Thu, 9 Jun 2011 21:05:45 -0700
> >     > >> From: steve.langasek at ubuntu.com <mailto:steve.langasek at ubuntu.com>
> >     > >> To: grail69 at hotmail.com <mailto:grail69 at hotmail.com>
> >     > >> CC: upstart-devel at lists.ubuntu.com <mailto:upstart-devel at lists.ubuntu.com>
> >     > >> Subject: Re: Process substitution into loop
> >     > >>
> >     > >> 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})
> >     > You have an error in your script: it is missing the closing tick (see below).
> >     >
> >     > >>
> >     > >> > 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
> >     > >
> >     > > Actually /bin/sh is a symbolic link to bash on my system. Is there anyway to have bash as the
> >     > > shell used?
> >     >
> >     > script
> >     > /bin/bash <<EOT
> >     > while read -r DEVICE
> >     > do
> >     > echo "DEBUG: ip link set dev $DEVICE up" > /tmp/grail.log
> >     > done < <(ip link | awk '/^[0-9]/ && !/UP/ && gsub(/:/,""){print $2}')
> >     > EOT
> >     > end script
> >     >
> >     > Also, just for you :)...
> >     >
> >     > http://upstart.ubuntu.com/cookbook/#changing-the-default-shell
> >     >
> >     > Regards,
> >     >
> >     > James.
> >     >
> >     > >
> >     > >> 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 <mailto:slangasek at ubuntu.com> vorlon at debian.org <mailto:vorlon at debian.org>
> >     > >
> >     >
> > 
> >     --
> >     upstart-devel mailing list
> >     upstart-devel at lists.ubuntu.com <mailto:upstart-devel at lists.ubuntu.com>
> >     Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/upstart-devel
> > 
> > 
> 
> 
> - -- 
> Cheers,
> 
> James.
> - --
> James Hunt
> ____________________________________
> Ubuntu Foundations Team, Canonical.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> 
> iEYEARECAAYFAk33HlMACgkQYBWEaHcQG9ctAwCfaJrG/Vyf4robYFV5lCwhzGwq
> Sr0AnAwGL8UWMT9CC++/Zzh4ilFHCKmc
> =kNrb
> -----END PGP SIGNATURE-----
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/upstart-devel/attachments/20110615/ba0dd787/attachment-0001.html>


More information about the upstart-devel mailing list