Search code examples
bashfifomkfifo

How to redirect stdin to a FIFO with bash


I'm trying to redirect stdin to a FIFO with bash. This way, I will be able to use this stdin on an other part of the script.

However, it doesn't seem to work as I want

script.bash

#!/bin/bash

rm /tmp/in -f
mkfifo /tmp/in
cat >/tmp/in &

# I want to be able to reuse /tmp/in from an other process, for example : 
xfce4-terminal --hide-menubar --title myotherterm --fullscreen -x bash -i -c "less /tmp/in"

Here I would expect , when I run ls | ./script.bash, to see the output of ls, but it doesn't work (eg the script exits, without outputing anything)

What am I misunderstanding ?


Solution

  • I am pretty sure that less need additional -f flag when reading from pipe.

    test_pipe is not a regular file (use -f to see it)
    

    If that does not help I would also recommend to change order between last two lines of your script:

    #!/bin/bash
    
    rm /tmp/in -f
    mkfifo /tmp/in
    
    xfce4-terminal --hide-menubar --title myotherterm --fullscreen -x bash -i -c "less -f /tmp/in" &
    
    cat /dev/stdin >/tmp/in