zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh-users List <zsh-users@sunsite.dk>
Subject: Re: Tip of the day: previous command output
Date: Thu, 19 Aug 2004 10:16:10 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.61.0408190956440.9464@toltec.zanshin.com> (raw)
In-Reply-To: <20040819164250.GA21575@spiegl.de>

On Thu, 19 Aug 2004, Andy Spiegl wrote:

> So I modified Barts "keep" to use
>       kept=$($*)

Unless you also dropped the alias that prefixes keep with noglob, you 
still need $~*, and to make it an array you probably want

	kept=( $($~*) )

> So that I can do
>   keep locate -i pictures | grep -i thursday | grep -i png

I don't know whether you intended this, but [with your original edit] 
that's equivalent to

	kept=$(locate -i pictures)
	print -Rc - $kept | grep -i thursday | grep -i png

whereas I would guess that, rather, you meant

	kept=( $(locate -i pictures | grep -i thursday | grep -i png) )

There's no provision -- except via a zmodload'd module -- for creating a 
user-defined "precommand modifier" like (say) "time" or "coproc" that 
syntatically consumes an entire pipeline.  You'd have to use [inside 
"keep"]

	kept=( $(eval $*) )

[in this case NOT $~*] and write

	keep locate -i pictures \| grep -i thursday \| grep -i png

An alternative is to write "keep" this way:

    keep() {
	kept=()
	kept=( $~* )
	if [[ ! -t 0 ]]; then
	    while read line; do
		kept+=( $line )
	    done
	fi
	print -Rc - $kept
    }

Then you can write

	locate -i pictures | grep -i thursday | grep -i png | keep

and thanks to the magic of zsh running the last command of a pipe in the 
current shell when that command is a function or builtin, you get what you 
want in $kept.


  reply	other threads:[~2004-08-19 17:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-19  8:58 Jesper Holmberg
2004-08-19 15:20 ` Bart Schaefer
2004-08-19 16:42   ` Andy Spiegl
2004-08-19 17:16     ` Bart Schaefer [this message]
2004-08-20  9:30       ` Andy Spiegl
2004-08-20 11:13         ` Vincent Lefevre
2004-08-20 12:12       ` Andy Spiegl
2004-08-20 14:50         ` Vincent Lefevre
2004-08-21  4:25           ` Bart Schaefer
2004-08-21  5:58             ` Bart Schaefer
2004-08-21 17:06             ` Bart Schaefer
2004-08-22 20:58             ` Vincent Lefevre
2004-08-23  1:10               ` Bart Schaefer
2004-08-23 13:51                 ` Vincent Lefevre
2004-08-22 21:21             ` Vincent Lefevre
2004-08-22 23:03               ` Bart Schaefer
2004-08-23 13:00                 ` Vincent Lefevre
2004-08-23 15:21                   ` Bart Schaefer
2004-08-23 19:14                     ` Vincent Lefevre
2004-08-26 23:16                   ` Andy Spiegl
2004-08-27  0:43                     ` Bart Schaefer
2004-08-27 10:21                       ` Andy Spiegl
2004-08-31 15:03 ` zzapper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.61.0408190956440.9464@toltec.zanshin.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).