Ausgabeumleitung per Brace Expansion

06/03/2008 - 18:21 von Markus Wichmann | Report spam
Hi all,

Mein Problem ist folgendes: Ich habe hier (Debian GNU/Linux
lenny/sid, zsh 4.3.5) in meine .zshrc geschrieben:
#v+
| exec 3<>/dev/null
#v-

So, nun möchte ich gerne iceweasel starten und dabei beide
Ausgabekanàle in diesen dritten leiten:

#v+
| iceweasel >&3 2>&3
#v-

und um mich nicht Wund zu tippen, das ganze mit Brace Expansion:

#v+
| iceweasel {,2}>&3
#v-

Das funktioniert aber nicht, da startet er iceweasel mit stdout nach
/dev/null gehàngt, aber stderr trötet mir immer noch mein Terminal
voll. Außerdem versucht iceweasel verzweifelt eine Datei namens '2' zu
öffnen. Ich dachte: OK, dann leitet er die Kanàle um, bevor er die
geschweiften Klammern erweitert. Da sollte eval ja vielleicht etwas
dran àndern:

| eval iceweasel {,2}\>\&3

Und im Prozessverzeichniss nachgesehen: Sowohl stdout als auch stderr
zeigen noch auf mein Terminal. Eine Nachprüfung mit 'set -x' ergab,
dass bei der Ausführung die Umleitungen in Hochkommata gesetzt werden,
etwa so:

| iceweasel '>&3' '2>&3'

Frage: Wie mache ich es richtig?

TIA,
Markus
Progress (n.): process through which USENET evolved from smart people
in front of dumb terminals to dumb people in front of
smart terminals
 

Lesen sie die antworten

#1 Hauke Laging
06/03/2008 - 19:12 | Warnen spam
Markus Wichmann schrieb am Donnerstag 06 Màrz 2008 18:21:


| eval iceweasel {,2}\>\&3

Und im Prozessverzeichniss nachgesehen: Sowohl stdout als auch
stderr zeigen noch auf mein Terminal.



Das ist schon irgendwie skurril, denn bei mir macht
eval sleep 1000 {,2}\>\&3
genau das, was Du willst.

Eine Nachprüfung mit 'set -x'
ergab, dass bei der Ausführung die Umleitungen in Hochkommata
gesetzt werden, etwa so:

| iceweasel '>&3' '2>&3'



Da liegt wohl eine Verwechselung vor:

:~> eval sleep 1000 {,2}\>\&3
+zsh:9> eval sleep 1000 '>&3' '2>&3'
+(eval):1> sleep 1000

Du meinst die zweite Zeile? Die besagt nur, dass eval die Umlenkung
noch literal bekommt.


Frage: Wie mache ich es richtig?



Spannende Frage.
iceweasel >&3 2>&3
funktioniert wie gewünscht? Vielleicht zwingt iceweasel sein stderr
ja auch aufs Terminal... (schönen Gruß an strace)

Ich sehe da jedenfalls keinen Fehler, und mein sleep-Beispiel
bestàrkt mich darin.


CU

Hauke
http://www.hauke-laging.de/ideen/
http://www.hauke-laging.de/software/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?

Ähnliche fragen