Alternativa ao comando tee sem STDOUT

Alternativa ao comando tee sem STDOUT

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

Embora eu entenda por que é útil em algumas situações, que teetambém envia sua entrada para STDOUT novamente, nunca usei essa parte teepara algo útil. Na maioria das situações, esse recurso apenas faz com que minha tela fique cheia de tremores indesejados, se eu não der um passo extra e silenciá-la manualmente 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?

Responder1

Outra opção que evita encanar o material de volta e depois /dev/zeroé

sudo command | sudo dd of=FILENAME

Responder2

A ddsolução ainda imprime lixo no stderr:

$ 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 statusopção:

command | sudo dd status=none of=FILENAME

Outra possibilidade interessante (pelo menos para Linux):

command | sudo cp /dev/stdin FILENAME

Para copiar a entrada TTY em um arquivo, costumo fazer o seguinte:

sudo cp /dev/tty FILENAME

É uma pena que o tee não tenha a opção de suprimir o stdout.

Responder3

Você poderia usar um script. Ou seja, coloque algo assim em ie $HOME/bin/stee, 0teeou similar:

#!/bin/bash

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

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

#!/bin/bash

sudo tee "$@" > /dev/null

Torne-o executável:

$ chmod 755 aço

Agora faça isto:

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

Responder4

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

sudo sh -c 'do_something > FILENAME'

informação relacionada