tee to a file descriptor

tee to a file descriptor $ tee >(cat – >&2) the tee command does fine with file names, but not so much with file descriptors, such as &2 (stderr). This uses process redirection to tee to the specified descriptor.

In the sample output, it\’s being used to tee to stderr, which is connected with the terminal, and to wc -l, which is also outputting to the terminal. The result is the output of bash –version followed by the linecount

* View this command to comment, vote or add to favourites * View all commands by camocrazed


by David Winterbottom (codeinthehole.com)

URL: http://feedproxy.google.com/~r/Command-line-fu/~3/pRzpSThZ6IQ/tee-to-a-file-descriptor


coproc help – a new feature in bash

Image via Wikipedia

In the bash version 4.0, there is a new concept called coproc. This is very useful for some of the daily tasks.

co-process starts a process in the background, optionally with a NAME, with which other processes can communicate. This can be a very good substitution for pipes in lots of cases. You can learn more about coproc in the link below:

The coproc keyword [Bash Hackers Wiki]

From the man page for bash:
A coprocess is a shell command preceded by the coproc reserved word. A
coprocess is executed asynchronously in a subshell, as if the command
had been terminated with the & control operator, with a two-way pipe
established between the executing shell and the coprocess.

The format for a coprocess is:

coproc [NAME] command [redirections]

This creates a coprocess named NAME. If NAME is not supplied, the
default name is COPROC. NAME must not be supplied if command is a sim-
ple command (see above); otherwise, it is interpreted as the first word
of the simple command. When the coproc is executed, the shell creates
an array variable (see Arrays below) named NAME in the context of the
executing shell. The standard output of command is connected via a
pipe to a file descriptor in the executing shell, and that file
descriptor is assigned to NAME[0]. The standard input of command is
connected via a pipe to a file descriptor in the executing shell, and
that file descriptor is assigned to NAME[1]. This pipe is established
before any redirections specified by the command (see REDIRECTION
below). The file descriptors can be utilized as arguments to shell
commands and redirections using standard word expansions. The process
id of the shell spawned to execute the coprocess is available as the
value of the variable NAME_PID. The wait builtin command may be used
to wait for the coprocess to terminate.