Alternativa para o comando tee sem STDOUT

28

Estou usando | sudo tee FILENAME para poder gravar ou anexar a um arquivo para o qual permissões de superusuário são necessárias com bastante frequência.

Embora eu entenda por que é útil em alguma situação, que tee também envie sua entrada para STDOUT novamente, eu nunca realmente usei essa parte de tee para nada útil. Na maioria das situações, esse recurso só faz com que minha tela seja preenchida com tremulação indesejada, se eu não der o passo extra e manualmente silenciá-lo com tee 1> /dev/null .

Minha pergunta: Existe um comando arround, que faz exatamente a mesma coisa que tee , mas por padrão não gera nada para STDOUT?

    
por aef 12.11.2012 / 00:02

6 respostas

21

Outra opção que evita o retorno das coisas e depois para /dev/zero é

sudo command | sudo dd of=FILENAME
    
por 26.04.2013 / 10:10
2

Você pode usar um script. Ou seja coloque algo assim em, por exemplo, $HOME/bin/stee , 0tee ou similar:

#!/bin/bash

argv=
while [[ "$1" =~ ^- ]]; do
    argv+=" $1"
    shift
done

sudo tee $argv "$1" > /dev/null

#!/bin/bash

sudo tee "$@" > /dev/null

Tornar executável:

$ chmod 755 stee

Agora, por exemplo:

$ ls -la | stee -a /root/foo

    
por 12.11.2012 / 00:43
2

A solução dd ainda imprime o lixo para a stdout:

$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s

Isso pode ser evitado usando a opção status :

command | sudo dd status=none of=FILENAME

Outra possibilidade interessante (para o Linux, de qualquer forma):

command | sudo cp /dev/stdin FILENAME

Para copiar a entrada de TTY em um arquivo, geralmente faço isso:

sudo cp /dev/tty FILENAME

É muito ruim que o tee não tenha uma opção para suprimir o stdout.

    
por 22.01.2016 / 06:17
1

Você pode agrupar todo o seu comando no sudo, assim o próprio shell, assim como os redirecionamentos, são executados como root :

sudo sh -c 'do_something > FILENAME'
    
por 01.12.2017 / 12:39
-1

Não existe um programa diretamente para fazer isso (isso é praticamente o único momento em que seria útil), mas você poderia facilmente escrever o seu próprio. Se você não deseja programar, você também pode escrever um script de shell simples que faça a mesma coisa: cat > $1 . Isso é diferente de colocá-lo em linha (como sugerido pela serragem) porque o sudo se aplicará a todo o script, incluindo o redirecionamento.

    
por 12.11.2012 / 00:39
-2

Eu sei que é um pouco tarde demais, mas o que eu faço em tais casos (quando um stdout 'flat', mas também um arquivo temporário é necessário) é:

tee whatever | grep -v ""
    
por 06.06.2017 / 22:27