Direkte Ausgabe an Pipe und Standard

14

Ich habe mich gefragt, ob es eine Möglichkeit gibt, die Ausgabe eines Befehls an die Standardausgabe weiterzuleiten. Druckt beispielsweise fortuneeinen Glückskeks und kopiert ihn auch in die Zwischenablage:

$ fortune | tee >(?stdout?) | pbcopy 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
user14492
quelle
Ich habe mein OSX nicht zur Hand, was ist mit fortune | tee $(tty) | pbcopy?
Archemar

Antworten:

9

Ihre Annahme:

fortune | tee >(?stdout?) | pbcopy

funktioniert nicht, da die fortuneAusgabe zweimal auf Standard ausgegeben wird, sodass Sie die Ausgabe auf verdoppeln pbcopy.

In OSX (und anderen Systemunterstützungen /dev/std{out,err,in}) können Sie Folgendes überprüfen:

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

2zweimal anstelle von 1und ausgeben 2.

Sie müssen andere Dateideskriptoren verwenden, Beispiel Standardfehler durch /dev/stderr:

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

oder verwenden Sie tty, um das angeschlossene Pseudo-Terminal zu erhalten:

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

Mit zshund multiosOptionssatz brauchen Sie überhaupt nicht tee:

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2
cuonglm
quelle
tee $(tty)Oder, weißt du,tee /dev/tty
Kenster
tolle Erklärung, Top SO Antwort rundum.
Merlin
10

teeschreibt immer in die Standardausgabe. Wenn Sie die Daten zusätzlich zu dem Terminal, an dem die Standardausgabe bereits ausgeführt wird, an einen Befehl senden möchten, verwenden Sie einfach die Prozessersetzung mit diesem Befehl. (Beachten Sie, dass die >Prozessersetzung trotz des Beginns nicht die Standardausgabe umleitet, sondern vom teeBefehl als Parameter angesehen wird.)

fortune | tee >(pbcopy)
Gilles 'SO - hör auf böse zu sein'
quelle
Das ist gut, auch eine gute Lösung.
Merlin
0

Cuonglm hat alles gesagt.

Probiere es einfach:

fortune | tee "$(tty)" | pbcopy

ttysollte /dev/pts/99in einer interaktiven Sitzung (dh im Terminal) in ein tatsächliches Pseudo-Terminal (wie ) aufgelöst werden, oder nicht in Batch, at und Daemon.

Archemar
quelle