Por que quase todas as instruções relacionadas à anexação de texto aos arquivos do sistema, como fstab
e /etc/apt/sources.list.d/<name>.list
envolvem o uso tee
e echo
a adição do referido texto?
Veja os seguintes exemplos, que são executados como raiz :
## 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
Correr diff -u file1 file2
não retorna nada; A execução md5sum file1 file2
mostra que as somas de verificação são idênticas, o que me traz de volta à minha pergunta original:
Por que é | tee <FILENAME>
tão prevalecente nos documentos do Ubuntu, é apenas uma boa prática, caso contrário não seria mais fácil usar o exemplo 2 em vez de passar a saída de echo
para tee
?
command-line
tee
Alexej Magura
fonte
fonte
Respostas:
Há uma diferença: tee duplica a saída: envia-a para o arquivo e para a tela.
Mas há mais:
Por exemplo, se você deseja gravar alguma sequência em dois arquivos ao mesmo tempo, o comando com tee que você pode usar é:
Outra coisa que o tee 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 nesse arquivo:
Mas com o tee tudo vai dar certo:
2 exemplos deste site . Tem um pouco mais.
fonte
sudo
semtee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, as coisas torna-se confusoecho "some text" | tee file1 file2 ... fileN
e talvez acrescentaria> /dev/null
, se você não quiser desordem no stdout.tee
pega o fluxo de entrada padrão e grava- o no fluxo de saída padrão e também em um fluxo de arquivos. Se isso ajuda as pessoas a se lembrarem, o nome do comando vem de um divisor em T no encanamento. Há um bom artigo da Wikipedia onde eu aprendi sobre a origem do nome do comando.fonte
Primeiro de tudo,
tee
ele próprio não anexa texto, nem o faz>
.É
tee -a
e seu complemento>>
que APENDE o texto.Eu não acredito que todos os shells suportem a
>>
função, por issotee
é mais comumente usado. (Pense apenas na idade antigash
). Tee é um comando, enquanto>>
é um operador.Se você usa (meu favorito)
bash
,>
e>>
é muito melhor / mais fácil.Usar
tee
também permite que você sudo APENAS esse comando, para que você não precise sudo toda a instrução, como emsudo sh -c "echo foo > bar"
.tee
também permite dividir a saída. Claro, tudo isso pode ser visto emman tee
. É principalmente apenas a sua preferência pessoal.Para ler mais, veja aqui e aqui .
fonte
sudo somecommand >> filea
será executadosudo somecommand
e, em seguida, como a invocação do usuário, anexar a saídafilea
. Usandosudo sh -c "somecommand >> filea"
obras, mas pode causar pesadelos com citações aninhadas. O usosomecommand | sudo tee -a filea
é executadosomecommand
como usuário que está chamando e, em seguida, anexa a saídafilea
como raiz - o que geralmente é o que o usuário queria.