0

I am trying to play around and understanding ttys. In one terminal emulator window, the output of tty gives me

$ tty
/dev/ttys010

So I figured if I write to this device, the terminal window will show the output. In a second window, when I run

$ echo "test" > /dev/ttys010

The first window shows the word "test" as expect. However, when I run

$ echo "test" | /dev/ttys010

I get no output in the first window. Why is this? I assume its because | redirects stdout to programs while > redirects output to files.

  • Does this answer your question? [What is the difference between "Redirection" and "Pipe"?](https://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe). Also, you can, with `echo test | sudo pipe /dev/ttyx` – Pablo Bianchi Jul 04 '23 at 15:48
  • 1
    With `| /dev/ttys010` is NOT an executable program expecting "test" on its `STDIN` I/O stream, it's a device, which needs to be managed by a program. `>/dev/ttys010` connects the device to the `STDOUT` I/O stream of the "`echo`" program. A better explanation is available in `man bash`. – waltinator Jul 04 '23 at 16:32

1 Answers1

3

You can write to a file with a pipe. Here are two alternatives

echo "test" | tee /dev/ttys010
echo "test" | cat > /dev/ttys010

As explained in the answer in the comment above, pipes feed stdout of one program to stdin of another program, and /dev/ttys010 is a device file, not a program and is generally not something you want to run.

user10489
  • 3,564
  • 2
  • 5
  • 22