Existe alguma diferença entre tee e quando usando echo?

0

Existe alguma diferença entre fazer:

echo "hahaha" >> file1

e

echo "hahaha" |tee -a file1

?

Sim, notei que não posso escrever para escrever arquivos protegidos, mesmo com sudo echo , mas posso se eu sudo tee . Obrigado.

    
por iamAguest 24.08.2018 / 16:21

1 resposta

3

Não há diferença no sentido de que os dados no arquivo serão os mesmos se echo e tee forem executados com sucesso e se o arquivo for gravável pelo usuário atual.

O comando tee produziria adicionalmente a saída na saída padrão its , mostrando o texto que também seria anexado ao arquivo. Isso não aconteceria no primeiro comando.

Outra diferença é que, se o arquivo puder ser não gravado, o primeiro comando, com o redirecionamento, nem mesmo executaria o echo , enquanto o echo executado no segundo comando, mas tee falharia ao escrever no arquivo ( tee ainda produziria texto no terminal).

Isso pode ser significativo no caso em que você executa algum processo de execução longa que produz saída:

long_running_thing >>file

Isso nem sequer iniciaria long_running_thing se file não fosse gravável.

long_running_thing | tee -a file

Isso executaria long_running_thing e seria executado até o final, mas nenhuma saída seria salva em file se não fosse gravável (e a saída também seria gravada no terminal a partir de tee ).

A próxima coisa a ter em conta, que você sugeriu no final da pergunta, é que

sudo echo hello >>file

não funcionará se file não for gravável pelo usuário atual . Isso ocorre porque o redirecionamento é processado antes do comando ser executado (veja acima).

Para anexar a um arquivo de propriedade da raiz, use

echo hello | sudo tee -a file

Aqui, executamos tee como root. O echo não precisa ser executado pelo root, mas o utilitário que realmente grava no arquivo precisa ser executado como root (ou como qualquer usuário que possua o arquivo) se não for de propriedade do usuário atual.

Outra possibilidade seria usar

sudo sh -c 'echo hello >>file'

Isso usaria um redirecionamento para anexar dados ao arquivo, mas, nesse caso, o shell que executa o redirecionamento está sendo executado como raiz, portanto, ele não falharia ao anexar / criar o arquivo devido a permissões / propriedade restritivas pode ainda falhar se, por exemplo, file é o nome de um diretório).

    
por 24.08.2018 / 16:27