Eu queria saber se existe uma maneira de canalizar a saída de um comando e direcioná-lo para o stdout. Por exemplo, fortune
imprime um biscoito da sorte e também o copia para a área de transferência:
$ 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
?Respostas:
Sua suposição:
não funcionará porque a
fortune
saída será gravada em padrão duas vezes, então você dobrará a saída parapbcopy
.No OSX (e em outros sistemas suportados
/dev/std{out,err,in}
), você pode verificá-lo:saída
2
duas vezes em vez de1
e2
.Você deve usar outros descritores de arquivo, exemplo de erro padrão através de
/dev/stderr
:ou use
tty
para obter o pseudo terminal conectado:Com
zsh
emultios
conjunto de opções, você não precisa detee
nada:fonte
tee $(tty)
Ou, você sabe,tee /dev/tty
tee
sempre grava em sua saída padrão. Se você deseja enviar os dados para um comando, além do terminal para o qual a saída padrão já está indo, basta usar a substituição de processo com esse comando. (Observe que, apesar de começar com>
, a substituição do processo não redireciona a saída padrão, otee
comando a vê como um parâmetro.)fonte
cuonglm disse tudo.
Apenas tente:
tty
deve resolver o pseudo-terminal real (como/dev/pts/99
) na sessão interativa (ou seja, no terminal), ou não um lote no lote, no at e daemon.fonte