
Estou usando | sudo tee FILENAME
para 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 tee
também envia sua entrada para STDOUT novamente, nunca usei essa parte tee
para 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 dd
soluçã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 status
opçã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
, 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
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'