Tee
não é inútil
Talvez você soubesse disso mesmo assim? Se não, continue lendo! Ou se você sabe como funciona, mas não tem certeza de porque existe, pule para o final e veja como ele se encaixa na filosofia Unix.
Qual é a finalidade de tee
?
Na sua forma mais simples, ele pega dados na entrada padrão e grava isso na saída padrão e em um (ou mais) arquivos. Ele foi comparado a uma peça do encanamento na maneira como divide uma entrada em duas saídas (e duas direções) .
Exemplos
Vamos dar o seu primeiro exemplo:
do_something | tee -a logfile
Isso pega a saída de do_something
e a anexa ao arquivo de log, enquanto também o exibe para o usuário. Na verdade, a página da Wikipedia sobre tee
tem isso como o segundo exemplo:
To view and append the output from a command to an existing file:
lint program.c | tee -a program.lint
This displays the standard output of the lint program.c command at the computer and at the same time appends a copy of it to the end of the program.lint file. If the program.lint file does not exist, it is created.
O próximo exemplo tem outro uso: escalação de permissões :
To allow escalation of permissions:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
This example shows tee being used to bypass an inherent limitation in the sudo
command. sudo
is unable to pipe the standard output to a file. By dumping its standard out stream into /dev/null
, we also suppress the mirrored output in the console. The command above gives the current user root access to a server over ssh, by installing the user's public key to the server's key authorization list.
Ou talvez você queira pegar a saída de um comando, escrever isso em algum lugar e também usá-lo como entrada para outro comando?
You can also use tee command to store the output of a command to a file and redirect the same output as an input to another command.
The following command will take a backup of the crontab entries, and pass the crontab entries as an input to sed command which will do the substitution. After the substitution, it will be added as a new cron job.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(crédito para exemplos de uso do comando Tee )
Tee
funciona com a filosofia Unix:
Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
(Crédito para Noções básicas sobre a Filosofia Unix )
tee
se encaixa em todos eles:
- faz uma coisa: cria uma cópia extra de entrada
- funciona com outros programas porque é a cola (ou uma peça de encanamento 'T', se você preferir) que permite que outros programas trabalhem juntos, como nos exemplos acima
- faz isso manipulando um fluxo de texto dado na entrada padrão