bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Undocumented feature: Unnamed fifo '<(:)'


From: Chet Ramey
Subject: Re: Undocumented feature: Unnamed fifo '<(:)'
Date: Tue, 30 Jun 2020 12:30:53 -0400
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.9.0

On 6/28/20 9:49 AM, felix wrote:

> Bash Versions: 3.2.57(1)-release, 5.0.3(1)-release, 5.1.0(1)-alpha
> 
> In order to reduce forks and make some tasks a lot quicker, I run
> forked filters as background tasks, with dedicated I/O fd.
> 
> For sample, to convert human datetime to UNIX SECONDS, instead of running
>    _out=$(date -d "$_string" +%s)
> many time in same script, I run something like:
> 
>     _fifo=$(mktemp -u /tmp/fifo-XXXXXXXX)
>     mkfifo $_fifo
>     exec 9> >(exec stdbuf -o0 date -f - +%s >$_fifo 2>&1)
>     exec 8<$_fifo
>     rm $_fifo
> 
> Then to convert human datetime to UNIX SECONDS:
> 
>         echo >&9 $_string
>         read -t 1 -u 8 _out
> 
> become a lot quicker!
> 
> But I recently discovered another way for this:
> 
>     exec 8<> <(:)
>     exec 9> >(exec stdbuf -o0 date -f - +%s >&8 2>&8)
> 
> usable in same way:
> 
>         echo >&9 $_string
>         read -t 1 -u 8 _out
> 
> maybe a little more quicker...

But not guaranteed to work everywhere, especially those systems that use
/dev/fd and pipes for this instead of FIFOs. (And lack `stdbuf'.)

> There is maybe something to document or even create a new feature
> about open2 and open3...

No, it's not. But if it works for you, go ahead and use it. Just be
prepared to have to change it if necessary.

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]