[Top][All Lists]

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

Undocumented feature: Unnamed fifo '<(:)'

From: felix
Subject: Undocumented feature: Unnamed fifo '<(:)'
Date: Sun, 28 Jun 2020 15:49:45 +0200
User-agent: Mutt/1.10.1 (2018-07-13)

Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2 -fdebug-prefix-map=/build/bash-2bxm7h/bash-5.0=. 
-fstack-protector-strong -Wformat -Werror=format-security -Wall 
-Wno-parentheses -Wno-format-security
uname output: Linux medium 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) 
x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu

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...

This was tested using https://f-hauri.ch/vrac/date1fork-demo.sh under
latest version of bash: 5.1.0(1), debian stable version: 5.0.3(1) and
old 3.2: 3.2.57(1).

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

(I will have to rewrite https://f-hauri.ch/vrac/shell_connector.sh.txt ;)

 Félix Hauri  -  <felix@f-hauri.ch>  -  http://www.f-hauri.ch

reply via email to

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