From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7125 invoked from network); 5 Oct 2000 18:11:31 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 5 Oct 2000 18:11:31 -0000 Received: (qmail 29164 invoked by alias); 5 Oct 2000 18:11:24 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12909 Received: (qmail 29156 invoked from network); 5 Oct 2000 18:11:24 -0000 X-Mailer: exmh version 2.0.2 2/24/98 To: zsh-workers@sunsite.auc.dk Subject: Bug report + feature request Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 05 Oct 2000 14:11:21 -0400 From: "Sullivan N. Beck" Message-Id: <20001005181121.ADB45DCE4@mail.cise.ufl.edu> I have found a bug in zsh. I've got access to: zsh 3.1.5 on Solaris 2.6 zsh 3.1.9 on Solaris 8, redhat 6.2, irix 6.5 and each of these suffers from the problem. Basically, I want to switch STDOUT and STDERR so I pipe STDERR to some other commands. The following lines show what's happening to prevent me from doing this (though I can do it in sh/ksh distributed with Solaris). echo '=1 =====' echo ls -l /tmp/z | while read line ;do echo ":: "$line; done echo echo '=2 =====' echo ls -l /tmp/z/a | while read line ;do echo ":: "$line; done echo echo '=3 =====' echo ls -l /tmp/z 3>&1 1>&2 2>&3 | while read line ;do echo ":: "$line; done echo echo '=4 =====' echo ls -l /tmp/z/a 3>&1 1>&2 2>&3 | while read line ;do echo ":: "$line; done produce =1 ===== :: total 16 :: -rw-r--r-- 1 sbeck apps 396 Oct 5 13:44 foo =2 ===== /tmp/z/a: No such file or directory =3 ===== total 16 -rw-r--r-- 1 sbeck apps 396 Oct 5 13:44 foo :: total 16 :: -rw-r--r-- 1 sbeck apps 396 Oct 5 13:44 foo =4 ===== :: /tmp/z/a: No such file or directory Notice that in the 3rd section, the output from the command ends up on both STDOUT and STDERR. All other shells (ksh, sh, bash) that I tested give the correct output for the 3rd case: total 16 -rw-r--r-- 1 sbeck apps 396 Oct 5 13:44 foo Now for the feature request. Since I'd actually like to separate and pipe STDOUT and STDERR separately to different commands (all of the above came about from various attempts to get this working) without resorting to fifos, intermediate files, etc., what I'd _really_ like to do is to be able to pipe different file descriptors similar to how I can redirect them to a file. For example, I'd like to replace the following lines: COMMAND > /tmp/stdout 2> /tmp/stderr cat /tmp/stderr | STDERR_COMMAND cat /tmp/stdout | STDOUT_COMMAND with the single line: COMMAND >| STDOUT_COMMAND 2>| STDERR_COMMAND If this syntax isn't acceptable, that's fine with me. Any syntax is fine. I'd just like the functionality. Please reply to me as well as the list since I'm not currently subscribed to this list. --------------------------| Sullivan Beck |--------------------------- mailto:sbeck@cise.ufl.edu | Senior System Programmer http://www.cise.ufl.edu/~sbeck | University of Florida PH : (352) 392-1057 | CISE Department Fax: (352) 392-1220 | CSE 314E ------------------------------------------------------------------------