help-bash
[Top][All Lists]
Advanced

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

Re: [Help-bash] How to not terminate a process using pipe?


From: Pierre Gaston
Subject: Re: [Help-bash] How to not terminate a process using pipe?
Date: Thu, 22 Feb 2018 09:00:47 +0200

On Thu, Feb 22, 2018 at 1:07 AM, Peng Yu <address@hidden> wrote:

> > The echo will open and close the the file refered to by in and out.
> > The close action will cause cat to quit.
> >
> > What you need to do is to keep the files open, like
> >
> > mkfifo in out
> > exec 111<in 222>out
> >
> > echo x >&111
> > read -r x <&222
> >
> > echo x >&111
> > read -r x <&222
> >
> > # Close the file descriptors.
> > exec 111<&- 222<&-
>
> This does not seem to work as it hangs there.
>
> /tmp$ cat main1.sh
> #!/usr/bin/env bash
> # vim: set noexpandtab tabstop=2:
>
> tmpdir=$(mktemp -d)
> mkfifo "$tmpdir"/infifo "$tmpdir"/outfifo
> set -v
> exec 111<"$tmpdir"/infifo 222>"$tmpdir"/outfifo
>
> echo x >&111
> read -r x <&222
>
> echo x >&111
> read -r x <&222
>
> # Close the file descriptors.
> exec 111<&- 222<&-
>
> /tmp$ ./main1.sh
> exec 111<"$tmpdir"/infifo 222>"$tmpdir"/outfifo
>
>
> --
> Regards,
> Peng
>
>
This script by itself does nothing, the pipe is blocking so you need at
least another process that reads and writes to these fifos.
For instance, this "works" with the kind of cat you had in your first
request (I added some echo to print something):


#!/usr/bin/env bash
# vim: set noexpandtab tabstop=2:
cat > in  <out &

exec 111>in 222<out

echo x >&111
read -r x <&222
echo $x
echo x >&111
read -r x <&222
echo $x

# Close the file descriptors.
exec 111<&- 222<&-


reply via email to

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