58 votes

Alternative à la commande tee sans STDOUT

J'utilise | sudo tee FILENAME pour pouvoir écrire ou ajouter des données à un fichier pour lequel les autorisations du super-utilisateur sont souvent requises.

Bien que je comprenne pourquoi cela peut être utile dans certaines situations, ce n'est pas le cas. tee envoie également son entrée à STDOUT, mais je n'ai jamais vraiment utilisé cette partie de tee pour trouver quelque chose d'utile. Dans la plupart des situations, cette fonction ne fait que remplir mon écran d'une gigue indésirable, si je ne fais pas l'effort supplémentaire de la faire taire manuellement à l'aide de la fonction tee 1> /dev/null .

Ma question : Existe-t-il une commande qui fait exactement la même chose que tee mais n'émet rien par défaut vers STDOUT ?

39voto

Yo Momma Points 1321

Une autre option qui permet d'éviter de renvoyer les données vers l'arrière et ensuite vers /dev/zero es

sudo command | sudo dd of=FILENAME

18voto

Curt Points 316

En dd imprime toujours des saletés sur 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

Cela peut être évité en utilisant l'option status option :

command | sudo dd status=none of=FILENAME

Une autre possibilité intéressante (pour Linux en tout cas) :

command | sudo cp /dev/stdin FILENAME

Pour copier l'entrée TTY dans un fichier, je procède souvent de la manière suivante :

sudo cp /dev/tty FILENAME

Il est dommage que tee n'ait pas d'option pour supprimer stdout.

6voto

Eric Gonnella Points 94

Vous pouvez utiliser un script. Par exemple, mettez quelque chose comme ceci dans i.e. $HOME/bin/stee , 0tee ou similaire :

~~#!/bin/bash

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

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

#!/bin/bash

sudo tee "$@" > /dev/null

Rendez-le exécutable :

$ chmod 755 stee

Maintenant, faites i.e. :

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

4voto

Vladan Points 121

J'ajouterais un sponge comme alternative.

Sur Ubuntu ou d'autres distributions basées sur Debian, vous pouvez l'installer avec sudo apt install -y moreutils

Veuillez noter qu'il y a quelques différences par rapport à tee sur lequel vous pouvez lire plus d'informations aquí y aquí

Contrairement à une redirection Shell, l'éponge absorbe toutes les données d'entrée avant d'écrire le fichier de sortie. Cela permet de construire des pipelines qui lisent et écrivent dans le même fichier.

Cette différence est en fait un avantage pour mes cas d'utilisation typiques.

1voto

Thunderbeef Points 137

Vous pouvez envelopper toute votre commande dans sudo, de sorte que le Shell lui-même, ainsi que les redirections, sont exécutés en tant que root :

sudo sh -c 'do_something > FILENAME'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X