Alternativa al comando tee sin STDOUT

Alternativa al comando tee sin STDOUT

Lo estoy usando | sudo tee FILENAMEpara poder escribir o agregar a un archivo para el cual se requieren permisos de superusuario con bastante frecuencia.

Aunque entiendo por qué es útil en algunas situaciones, que teetambién envía su entrada a STDOUT nuevamente, nunca usé esa parte teepara nada útil. En la mayoría de las situaciones, esta característica solo hace que mi pantalla se llene con vibraciones no deseadas, si no doy el paso adicional y la silencio manualmente con tee 1> /dev/null.

Mi pregunta: ¿Existe un comando alrededor que haga exactamente lo mismo que tee, pero que, de forma predeterminada, no envíe nada a STDOUT?

Respuesta1

Otra opción que evita canalizar el material de un lado a otro /dev/zeroes

sudo command | sudo dd of=FILENAME

Respuesta2

La ddsolución todavía imprime basura en 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

Eso se puede evitar usando la statusopción:

command | sudo dd status=none of=FILENAME

Otra posibilidad interesante (al menos para Linux):

command | sudo cp /dev/stdin FILENAME

Para copiar la entrada TTY en un archivo, suelo hacer esto:

sudo cp /dev/tty FILENAME

Es una lástima que Tee no tenga una opción para suprimir la salida estándar.

Respuesta3

Podrías usar un guión. Es decir, ponga algo como esto en ie $HOME/bin/stee, 0teeo similar:

#!/bin/bash

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

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

#!/bin/bash

sudo tee "$@" > /dev/null

Hazlo ejecutable:

$ chmod 755 acero

Ahora haz, es decir:

$ ls-la | stee -a /raíz/foo

Respuesta4

Puede encapsular todo el comando en sudo, de modo que el shell en sí, así como las redirecciones, se realicen como root:

sudo sh -c 'do_something > FILENAME'

información relacionada