Existe algum significado em usar tee?

35

Por que quase todas as instruções sobre como anexar texto a arquivos do sistema, como fstab e /etc/apt/sources.list.d/<name>.list , envolvem o uso de tee e echo para anexar o dito texto?

Veja os exemplos a seguir, que são executados como root :

## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2

A execução de diff -u file1 file2 não retorna nada; executar md5sum file1 file2 mostra que seus md5sums são idênticos, o que me traz de volta à minha pergunta original:

Por que o | tee <FILENAME> é tão comum nos documentos do Ubuntu, é uma boa prática? Caso contrário, não seria mais fácil usar apenas o exemplo 2 em vez de passar a saída de echo para tee ?

    
por Alexej Magura 20.01.2014 / 19:37

3 respostas

67

Existe uma diferença: o tee duplica a saída: envia para o arquivo e para o display.

Mas há mais:

  • Por exemplo, se você quiser escrever alguma string em dois arquivos de uma só vez, o comando com tee que você pode usar é:

     echo "some text" | tee file1 > file2  
    
  • Outra coisa que você pode ajudar é evitar um problema ao usar o sudo. O operador de redirecionamento de saída normal é sempre executado com seus privilégios de usuário, também quando você escreve um sudo na frente do comando que gera o texto STDOUT. Em outras palavras, isso falhará se você não tiver permissão para gravar no arquivo:

     sudo echo "something" > bar  
    

    Mas com o tee tudo vai bem:

    echo "something" | sudo tee bar  
    

2 exemplos de este site . Tem mais alguns.

    
por Rinzwind 20.01.2014 / 19:48
8

Primeiro, tee não anexa texto nem > .

É tee -a e seu complemento, >> , que ANUNCIA o texto.

Eu não acredito que todos os shells suportem a função >> , então é por isso que tee é mais comumente usado. (Pense em apenas antigo sh ). Tee é um comando, enquanto >> é um operador.

Se você usa (meu favorito pessoal) bash , > e >> são muito mais agradáveis / fáceis.

Usar tee também permite que você sugue APENAS esse comando para não ter que sudo a instrução inteira, como em sudo sh -c "echo foo > bar" . tee também permite dividir a saída. Claro, tudo isso pode ser visto em man tee . É principalmente apenas sua preferência pessoal.

Para ler mais, consulte aqui e aqui .

    
por Kaz Wolfe 20.01.2014 / 19:43
0

tee pega o fluxo de entrada padrão e grava para ambos o fluxo de saída padrão, bem como um fluxo de arquivo. Se isso ajudar as pessoas a lembrar, o nome do comando vem de um divisor T no encanamento. Existe um bom artigo da Wikipedia onde aprendi sobre a origem do nome do comando.

    
por user391339 01.03.2018 / 08:58