Sortie directe sur tuyau et sortie standard

14

Je me demandais s'il y avait un moyen de diriger la sortie d'une commande et de la diriger vers la sortie standard. Ainsi, par exemple, fortuneimprime un cookie de fortune et le copie également dans le presse-papiers:

$ fortune | tee >(?stdout?) | pbcopy 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
user14492
la source
Je n'ai pas mon OSX à portée de main, qu'en est-il fortune | tee $(tty) | pbcopy?
Archemar

Réponses:

9

Votre hypothèse:

fortune | tee >(?stdout?) | pbcopy

ne fonctionnera pas car la fortunesortie sera écrite deux fois en sortie standard, vous doublerez donc la sortie pbcopy.

Dans OSX (et la prise en charge d'autres systèmes /dev/std{out,err,in}), vous pouvez le vérifier:

$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2

sortie 2deux fois au lieu de 1et 2.

Vous devez utiliser d'autres descripteurs de fichiers, exemple d'erreur standard via /dev/stderr:

$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2

ou utilisez ttypour obtenir le pseudo terminal connecté:

$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2

Avec zshet multiosensemble d'options, vous n'avez pas besoin teedu tout:

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2
cuonglm
la source
tee $(tty)Ou, tu sais,tee /dev/tty
Kenster
grande explication, top réponse SO tout autour.
Merlin
10

teeécrit toujours sur sa sortie standard. Si vous souhaitez envoyer les données à une commande en plus du terminal où la sortie standard va déjà, utilisez simplement la substitution de processus avec cette commande. (Notez que malgré le début >, la substitution de processus ne redirige pas la sortie standard, la teecommande la considère comme un paramètre.)

fortune | tee >(pbcopy)
Gilles 'SO- arrête d'être méchant'
la source
C'est bien, c'est aussi une bonne solution.
Merlin
0

cuonglm a tout dit.

Essayez simplement:

fortune | tee "$(tty)" | pbcopy

ttydevrait se résoudre à un pseudo terminal réel (comme /dev/pts/99) dans une session interactive (c'est-à-dire dans un terminal), ou pas de tty en lot, sur et démon.

Archemar
la source