Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Sep 2006 07:23:19 -0700
From:      David King <dking@ketralnis.com>
To:        freebsd-questions@freebsd.org
Cc:        lassee@kth.se
Subject:   Re: How do I give 2 parameters to programs in an unix enviroment?
Message-ID:  <F05BCFC5-60FB-423A-9CFC-4085612D307B@ketralnis.com>
In-Reply-To: <45016BBC.8080803@kth.se>
References:  <45016BBC.8080803@kth.se>

next in thread | previous in thread | raw e-mail | index | archive | help
Here's an example using zsh (I assume it's the same using bash, but  
different using tcsh or sh):

diff <(find /usr/local -type f | sort) <(for each in /var/db/pkg/*/ 
+CONTENTS; do grep -v '^@' $each; done | sort)

This does a diff(1) of what /var/db/pkg says that /usr/local should  
look like, and what it *really* looks like (note that it would need  
some tuning in order to actually be useful, but you get the idea)

This uses the <() operator. What the <() operator does is create a  
named pipe in /tmp, execute the commands contained in the parenthesis  
in a subshell, and connect the stdout of the subshell into that named  
pipe. So it's sort of like using temp files, but you don't have to  
clean up after yourself. There's another, similar operator that does  
force it to use temp files, but I can never remember what it is :)  
Check the manpages for your shell

Note that not all programs support using named pipes instead of  
files, since they expect to be able to do things like rewind the  
current position in the file descriptor. diff(1) looks to support it  
okay, though.

A simplified version of your example would look like this:

diff <(cat foo) <(cat bar)



On 08 Sep 2006, at 06:10, Lasse Edlund wrote:

> If I have two files "foo" and "bar" and try to run diff on them I  
> write:
> $diff foo bar
> I can also write
> $cat foo | diff - bar
> But how do I give a program two (2) commands? not only to diff
> but to any program that wants double input...
> I wanna do
> $cat foo | cat bar | diff - -
> especially with echo commands that would be handy so I dont have to
> create files!





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F05BCFC5-60FB-423A-9CFC-4085612D307B>