[Top][All Lists]

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

Re: how to get pipes working

From: Paul D. Smith
Subject: Re: how to get pipes working
Date: Wed, 17 May 2006 16:19:54 -0400

%% "PATTON, BILLY \(SBCSI\)" <address@hidden> writes:

  pb> Here is a sample of code I have working in a shell script and it works
  pb> find.

  pb> #!/usr/bin/ksh

  pb> Now when I put it into my makefile

  pb> /bin/sh: Syntax error at line 1 : `|' is not expected.

If it works in a script and fails in the makefile, then 99.99% of the
time it's going to be quoting issues.

The only real quoting issues in make are making sure "$" is quoted

  pb> AR_ADD = $(NM) $$< | grep "main.*extern|entry.*CODE" > /dev/null ; \
  pb>         if [ $$? -ne 0 ] ; then $(AR) $(AR_OPT) $$(LIB) $$@ > /dev/null ; 

This is _NOT_ quoted properly.

Remember you're quoting "$" that you want to PASS TO THE SHELL.  You
leave _unquoted_ "$" that you want MAKE TO EXPAND before invoking the

Don't quote $<; $< is a make variable, so it must be expanded before the
shell is invoked.

Similarly for $(LIB) and address@hidden

  pb> I get :
  pb> ... ; /usr/bin/nm $< | grep "main.*extern|entry.*CODE" > /dev/null ; if [ 
$? -ne 0 ] ; then ar rv $(LIB) $@ > /dev/null ; fi

Yes!  This is the exact text make is sending to the shell!

If you take that text and put it in a script or on the command line,
your shell will error out just as the one make does.

Try running just one bit:

    $ /usr/bin/nm $< | grep "foo"
    -bash: syntax error near unexpected token `|'


Well, "<" is a special character to the shell, that's why: it's input

 Paul D. Smith <address@hidden>          Find some GNU make tips at:            
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist

reply via email to

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