zsh-users
 help / color / mirror / code / Atom feed
From: Ray Andrews <rayandrews@eastlink.ca>
To: zsh-users@zsh.org
Subject: Re: set -F kills read -t
Date: Tue, 18 Mar 2014 15:08:24 -0700	[thread overview]
Message-ID: <5328C3D8.9020603@eastlink.ca> (raw)
In-Reply-To: <140318104505.ZM15560@torch.brasslantern.com>

On 03/18/2014 10:45 AM, Bart Schaefer wrote:


Peter, Bart:

Thanks, now I at least know what was busted.  I must tread lightly on 
this point because zsh
has it's own culture, but from the perspective of my C brain, " read -t 
"  ... maybe this, maybe
that ... with exactly the same input is hard to accept.  It's not very 
robust.

> (One could argue that "read" should always erase the parameter to which
> it was told to write, no matter whether the action of reading succeeds;
> but that's a different conversation.)
I'd say it's almost the nub of this conversation.  If, as Peter says, 
zsh is asynchronous,
and that means that process one might or might not be finished before 
process two, then it
seems to me that if there is a failure of some sort, then that should be 
manifested.  Identical runs
of identical code should produce identical results, no? Or at least warn 
you if that isn't going to
happen. I appeal to the doctrine of least surprise. It should null the 
variable first, then a twit like
me would at least have some warning that something is amiss. Or it could 
print " (null) " or
something else helpful.
> } Nothing is more important than predictability.
>
> Not always true.  The point of the -t option is to tell "read" that it
> is in fact more important not to wait than it is to be predictable.
Ok, but in the context of a pipe can't we have 'wait for the input that 
IS coming. Don't wait
one second or ten seconds or no seconds, wait until the input arrives. 
Wait until the first 'echo' has done its
thing. Ain't that intuitive? When would one ever want 'read -t' to maybe 
capture input or
maybe not, depending on something unpredictable?

echo "a string" | func

should send "a string" to func absolutely every time. The very existence 
of the pipe
symbol should say 'wait for it'. Wait for 'echo' to return.
> I suspect that what you really want is the answer to the question "is
> my standard input a pipe?" and to go do something else if it is not.
> Using "read -t" gives you an unpredictable answer to that question.
>
> Without more context of what your function is meant to do when the
> input is NOT a pipe, we can't tell you the best way to answer that
> question, or even whether it's the right question in the first place.
It's just a wrapper function. In this test case, around 'grep'. I use my 
wrapper directly
but I thought it may as well be able to accept input from a pipe too. 
But this is a
matter of principal. Asynchronous piping seems almost a contradiction. 
Surely each
stage of a chain of pipes has a right to expect linear travel of data.  
This problem seems
never to happen with piped binaries, they don't seem to need to wait 
some arbitrary
number of seconds for input, nor should it happen with functions. Or 
maybe that just
can't  be done, I don't know.

Anyway, in practical terms 'read -t 1' does the trick. Most of the time. 
Not on Tuesdays
nor when I have a process running in the background that slows things 
down, but mostly
it works ;-) Not meaning to rock the boat of course, zsh does what it does.


  reply	other threads:[~2014-03-18 22:38 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-02 14:26 implementing a control for completing filenames with a defined list of tokens Eric Smith
2013-12-02 15:58 ` Bart Schaefer
2014-03-16 14:13   ` Eric Smith
2014-03-16 19:27     ` Bart Schaefer
2014-03-16 20:13       ` Bart Schaefer
2014-03-18  3:10         ` set -F kills read -t Ray Andrews
2014-03-18  6:50           ` Bart Schaefer
2014-03-18 16:22             ` Ray Andrews
2014-03-18 16:47               ` Peter Stephenson
2014-03-18 17:45               ` Bart Schaefer
2014-03-18 22:08                 ` Ray Andrews [this message]
2014-03-18 23:12                   ` Jan Larres
2014-03-19  4:06                     ` Ray Andrews
2014-03-19  5:30                       ` Jan Larres
2014-03-19 15:23                         ` Ray Andrews
2014-03-19 20:00                           ` Bart Schaefer
2014-03-20  1:47                             ` Ray Andrews
2014-03-19  1:17                   ` Bart Schaefer
2014-03-19  5:00                     ` Ray Andrews
2014-03-19  6:37                       ` Bart Schaefer
2014-03-19 17:08                         ` Ray Andrews
2014-03-19 17:22                           ` Roman Neuhauser
2014-03-19 22:21                           ` Bart Schaefer
2014-03-20  1:46                             ` Ray Andrews
2014-03-20  4:21                               ` Bart Schaefer
2014-03-20 15:49                                 ` Ray Andrews
2014-03-20 16:08                                   ` Bart Schaefer
2014-03-20 21:27                                     ` Ray Andrews
2014-03-19 10:00                       ` Roman Neuhauser

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=5328C3D8.9020603@eastlink.ca \
    --to=rayandrews@eastlink.ca \
    --cc=zsh-users@zsh.org \
    /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).