zsh-users
 help / color / mirror / code / Atom feed
From: "Nikolay Aleksandrovich Pavlov (ZyX)" <kp-pav@yandex.ru>
To: Emanuel Berg <embe8573@student.uu.se>,
	"zsh-users@zsh.org" <zsh-users@zsh.org>
Subject: Re: virtual files?
Date: Wed, 20 Apr 2016 05:31:35 +0300	[thread overview]
Message-ID: <1589901461119495@web4m.yandex.ru> (raw)
In-Reply-To: <87zispqb9m.fsf@student.uu.se>

20.04.2016, 05:13, "Emanuel Berg" <embe8573@student.uu.se>:
> "Nikolay Aleksandrovich Pavlov (ZyX)"
> <kp-pav@yandex.ru> writes:
>
>>  In some cases you may use `>(process)` to create
>>  file descriptor that will be used like a named pipe
>>  and may replace real files in some cases (it does
>>  not support seek(), also some processes have a habit
>>  of closing all file descriptors except
>>  stdin/stdout/stderr). But it is launched in subshell
>>  which limits the usefullness further (i.e.
>>  you cannot directly save result in a variable).
>
> OK! That doesn't seem like any good samochuvstvie...
>
>>  Specifically this function does not need >() or any
>>  file at all:
>>
>>      ... echo -n \$ wget -q $link -O- | grep answer | cut
>>  -d \$ -f2 | cut -d \< -f1 ...
>
> But you still need the escaped quotes around "answer"
> otherwise it won't work due to the HTML data :)
>
> Now, it is true you don't *need* files here or in
> other situations like this. But it is a very good
> thing to have, to be able to name something something,
> and then stash the result there for future use.
> A variable or data structure, in essence.

For `wget -Ofoo` there may not be any variable/data structure. At all, file `foo` in this example is created by *wget*, zsh *cannot* intervent here: all it knows is that `wget` received argument `-Ofoo` which is a plain string like any other argument, it does not know what `foo` is (completion system is a separate thing and it can only make *guesses*, not know for sure). If you really need this you can create something like temporary tmpfs via FUSE which will be automatically unmounted when scripts exits, and this does not require any special support on zsh side.

As the other alternative one may create something like `=()` to work like “create temporary file, substitute its name here, after process finishes save file contents in the variable and remove it”. Basically a syntactic sugar for what you currently are doing, should be relatively easy (I did not look at relevant parts of the code though). Most of time this is not really needed: you may simply use stdout or stderr. Least of time… well, this is a *shell* language, complex applications were never its target. I believe this is why better integration with subprocesses is not implemented yet, though I sometimes see problems which would be solved much easier if e.g. when opening subshell zsh created a file descriptor through which updates to variables would be directed (i.e. something like a command socket, but through a pipe).

>
> Obviously creating a normal file just to remove it
> last thing doesn't score you any hacker points...
>
> So I think this is a good idea for you to contemplate
> incorporating in zsh!
>
> --
> underground experts united .... http://user.it.uu.se/~embe8573
> Emacs Gnus Blogomatic ......... http://user.it.uu.se/~embe8573/blogomatic
>                    - so far: 25 Blogomatic articles -


  reply	other threads:[~2016-04-20  2:37 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20  1:00 Emanuel Berg
2016-04-20  1:27 ` Nikolay Aleksandrovich Pavlov (ZyX)
2016-04-20  2:12   ` Emanuel Berg
2016-04-20  2:31     ` Nikolay Aleksandrovich Pavlov (ZyX) [this message]
2016-04-20  4:03     ` Bart Schaefer
2016-04-20  6:06       ` Emanuel Berg
2016-04-21 22:14       ` Emanuel Berg
2016-04-22  1:08         ` Bart Schaefer
2016-04-20  3:32 ` Benjamin R. Haskell
2016-04-20 20:34   ` Bart Schaefer
2016-04-22  5:26     ` Benjamin R. Haskell
2016-04-21  4:12   ` Emanuel Berg
2016-04-21  6:58     ` Bart Schaefer
2016-04-21  8:05       ` Emanuel Berg
2016-04-22  5:55     ` Benjamin R. Haskell

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=1589901461119495@web4m.yandex.ru \
    --to=kp-pav@yandex.ru \
    --cc=embe8573@student.uu.se \
    --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).