From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1113 invoked from network); 5 Jan 2004 20:37:00 -0000 Received: from sunsite.dk (130.225.247.90) by ns1.primenet.com.au with SMTP; 5 Jan 2004 20:37:00 -0000 Received: (qmail 12262 invoked by alias); 5 Jan 2004 20:36:40 -0000 Mailing-List: contact zsh-users-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 6980 Received: (qmail 12171 invoked from network); 5 Jan 2004 20:36:39 -0000 Received: from localhost (HELO sunsite.dk) (127.0.0.1) by localhost with SMTP; 5 Jan 2004 20:36:39 -0000 X-MessageWall-Score: 0 (sunsite.dk) Received: from [35.9.66.29] by sunsite.dk (MessageWall 1.0.8) with SMTP; 5 Jan 2004 20:36:39 -0000 Received: from valentino.pa.msu.edu (localhost.localdomain [127.0.0.1]) by valentino.pa.msu.edu (8.12.8/8.12.8) with ESMTP id i05KacdB009622 for ; Mon, 5 Jan 2004 15:36:38 -0500 Received: (from juhas@localhost) by valentino.pa.msu.edu (8.12.8/8.12.8/Submit) id i05KacIb009620 for zsh-users@sunsite.dk; Mon, 5 Jan 2004 15:36:38 -0500 X-Authentication-Warning: valentino.pa.msu.edu: juhas set sender to juhas@pa.msu.edu using -f Date: Mon, 5 Jan 2004 15:36:38 -0500 From: Pavol Juhas To: zsh-users@sunsite.dk Subject: Re: problem piping output of shell builtin Message-ID: <20040105203638.GA9567@pa.msu.edu> Mail-Followup-To: zsh-users@sunsite.dk References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i On Mon, Jan 05, 2004 at 07:26:15PM +0000, gj@sdf.lonestar.org wrote: > Hi all, > > I'm migrating from bash to zsh. It hasn't been so bad because I'm sort of new > to shell programming anyways ( though I did have "fun" figuring out that zsh > arrays start incrementing from 1 as opposed to bash's 0 :). I thought I'd > share the latest hiccup... > > Why can't I pipe the output of 'jobs' thusly? AFAIK, all the shells run one side of the pipe in a subshell. bash executes subshell for the right side of the pipe, however zsh does so for the left side. Therefore the `jobs' command in `jobs|read line' is evaluated in the subshell of zsh, which has no knowledge about processes in the parent shell - and produces no output. Left side subshell is however advantageous in other situations, just compare zsh -c 'echo 10|read a; echo .$a' .10 bash -c 'echo 10|read a; echo .$a' . To access information in the zsh job table, you need to use the builtin associate arrays jobtexts, jobstates and jobdirs, for example: for j in ${(k)jobstates}; do print -- "[$j] ${jobstates[$j]} ${jobtexts[$j]} in ${jobdirs[$j]}" done HTH, Pavol