tee
pode redirecionar a entrada padrão canalizada para a saída e arquivo padrão .
echo Hello, World! | tee greeting.txt
O comando acima mostraria a saudação na tela do terminal e a salvaria no conteúdo do greeting.txt
arquivo, criando o arquivo se não houver nenhum com esse nome.
Também há a -a
opção de tee
anexar ao arquivo existente em vez de substituir.
Existe uma maneira conveniente de redirecionar a entrada canalizada para o comando e a saída padrão em vez do arquivo?
Estou tentando criar um script de invólucro para buku
copiar para seleção primária o URL do marcador especificado por seu número de índice.
# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Aqui eu uso echo
duas vezes, primeiro para exibir no terminal e depois salvar na seleção principal (área de transferência).
Eu imagino algo echo $url | teeC xsel
ou um atalho para exibir a saída antes de passar para o próximo comando (comandos de encadeamento), o que me permitiria encadear todo o comando em uma linha sem a necessidade de salvar o resultado em uma variável da seguinte maneira:
buku -f 1 -p $1 | cut -f 2 | teeC xsel
Também posso usá-lo urlview
para visualizar, selecionar e abrir com o $BROWSER
seguinte:
bukuc 10-20 | urlview
tee /dev/tty
outty0
(não lembro exatamente ... Eu estou na estrada)info tee
menciona a substituição de processos e saída de tubo de tee para um programa ...Respostas:
É simples em shells que suportam a substituição de processos , por exemplo, bash
Caso contrário, você pode usar um FIFO (embora não seja conveniente)
fonte
sh
(Bourne shell) não suporta esse recurso; 2. A seta deve ficar como parte do operador único>()
para substituição do processo.O análogo direto de "T para comandos" é o
pee
comando do moreutils (tee
, mas com tubos). Seus argumentos são usados como comandos para executar, não como caminhos, e eles recebem a entrada canalizada para eles em vez de gravados em arquivo. Todos os comandos recebem a entrada padrão para a qual você canalizoupee
.Usando
pee
, você pode obter o resultado desejado dizendo para executar ambosxsel
ecat
com a entrada.Há um
cat
processo extra flutuando por aí para fazer a saída, o que não é realmente um problema para o seu caso de uso, mas poderia ser menos ideal em outras ocasiões. Isso funciona com qualquer shell, diferente da substituição do processo, mas é claro que requer uma ferramenta extra (provavelmente menos comum) instalada.Você pode dar comandos mais complexos, citando-os:
pee "xsel --display :1" cat
. Eles são executadossh
, então você precisa ter cuidado com os metacaracteres do shell.fonte