Me preguntaba si hay una manera de canalizar la salida de un comando y dirigirlo al stdout. Entonces, por ejemplo, fortune
imprime una galleta de la fortuna y también la copia en el portapapeles:
$ fortune | tee >(?stdout?) | pbcopy
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
fortune | tee $(tty) | pbcopy
?Respuestas:
Su suposición:
no funcionará porque la
fortune
salida se escribirá en el estándar dos veces, por lo que duplicará la salida enpbcopy
.En OSX (y otros sistemas de soporte
/dev/std{out,err,in}
), puede verificarlo:salida
2
dos veces en lugar de1
y2
.Debe usar otros descriptores de archivo, ejemplo error estándar a través de
/dev/stderr
:o use
tty
para obtener el pseudo terminal conectado:Con
zsh
ymultios
conjunto de opciones, que no es necesariotee
en absoluto:fuente
tee $(tty)
O, ya sabes,tee /dev/tty
tee
siempre escribe en su salida estándar. Si desea enviar los datos a un comando además del terminal donde ya está yendo la salida estándar, simplemente use la sustitución del proceso con ese comando. (Tenga en cuenta que a pesar de comenzar>
, la sustitución del proceso no redirige la salida estándar, eltee
comando lo ve como un parámetro).fuente
Cuonglm lo dijo todo.
Sólo inténtalo:
tty
debe resolverse a pseudo terminal real (como/dev/pts/99
) en sesión interactiva (es decir, en terminal), o no a tty en batch, at y daemon.fuente