Outra opção que evita o retorno das coisas e depois para /dev/zero
é
sudo command | sudo dd of=FILENAME
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?
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
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.
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'
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.
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 ""
Tags command-line tee linux posix