Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Redirect a specific file descriptor to a pipe?
- X-seq: zsh-users 22558
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxx
- Subject: Re: Redirect a specific file descriptor to a pipe?
- Date: Fri, 10 Mar 2017 18:24:30 -0800
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=3rQGwYMXW7WNBpsuOKFxB9q7IMQdbt4/+2VJeUaorfA=; b=ABj9d3bpUG4tvyXMynOJGSUY8zezCSBn2AsWHB26BgfROMlGIJAhooOXZ6dEh3ijbn inWW8Ep8wS989Oblh5jCknh4YiT5/1rrVyc93lORVfHNt8Io9FcdQVLiFdUezF8nWTbg 829FAfZmQUSTIPPfCJ4kOr/VbX366H6UYV7x+ovKx7o3KjC5E+rdT+71/aGzF18vNTcH GNQYiEKZQszmCARukFKbCHpo/93Kmv4JIJyCru93dD3YT3Bkyh2YxUcT1zPK6ukPV6KR hPBAzKwdy+YIRHJf4+OWCqkFJc7La94o+7F+OP/SWKR0KzjEFV9sdr6zfpN3Wr7UFFlS 2EpQ==
- In-reply-to: <CADgEyUu9Ds5kNMA-uLa0Fo4KHw6AKfC4r3dDqBJ--4rcPU9Lvw@mail.gmail.com>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CADgEyUsOZZZhiJM5JQrdHORt-ehoLJtYmwW8po4=LViuydMFiw@mail.gmail.com> <170309180417.ZM14034__34042.4779606566$1489111700$gmane$org@torch.brasslantern.com> <20170310172219.GA4206@chaz.gmail.com> <170310105112.ZM843@torch.brasslantern.com> <CADgEyUu9Ds5kNMA-uLa0Fo4KHw6AKfC4r3dDqBJ--4rcPU9Lvw@mail.gmail.com>
On Mar 10, 4:32pm, Nathan Dorfman wrote:
}
} I still think it might be useful to be able to pipe any fd, not just
} stdout, but I don't know if I can contrive a great example.
It depends on what your intentions are. The definition of a pipeline
in shell syntax is that the standard output of the left side connects
to the standard input of the right side. So if you want to use a pipe,
you have to make the right thing *be* stdout, regardless of which other
descriptor it might have started out to be.
So when I talk about intentions: Where do you expect stdout of the left
side to go if some other descriptor is feeding the pipe?
} Perhaps we
} can't redirect stdout because it's a curses program that needs direct
} terminal access, but we want to do something like this:
}
} strace -o /dev/fd/3 mutt 3>XXX
}
} Where instead of XXX, we want to send fd 3 to |xz or |ssh?
In that example you want "mutt" to remain the foreground process (it
can't share the terminal with xz or ssh). So you have to run xz in
the background. That is what process substitution is for:
strace -o /dev/fd/3 mutt 3>>(xz)
This puts xz in the background with its input connected to fd 3 and
it's output still connected to the terminal, while mutt stays in the
foreground with stdin + stdout unchanged.
It's up to you (or to xz) to make sure the subshell doesn't attempt to
spew something onto the terminal mutt is using.
On Mar 11, 1:17am, Mikael Magnusson wrote:
}
} whatever_command 5> >(pipe command here) 7> >(some other pipe here)
}
} but now that i'm testing it, it seems to not complete when it should
It's not hung, >(some other pipe here) is in the background so its
output has probably been printed below the prompt. Try
strace -o /dev/fd/7 =true 7> >(cat); wait
which will wait for >(cat) to finish before printing another prompt [it
is a relatively recent change to zsh that you can "wait" for process
substitution background jobs].
Messages sorted by:
Reverse Date,
Date,
Thread,
Author