PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umgang mit Deskriptoren in der Bash



thommy
19-10-2000, 10:13
Kennt jemand sinnvolle Anwendungen für Konstrukte der Art

<pre>
3<&0
<>datei
</pre>

Anders gefragt: Wo ist es notwendig, einen Eingabedeskriptor zu verdoppeln? Oder wofür sollte eine Datei gleichzeitig zum Lesen und Schreiben geöffnet werden?

Danke
Thomas

blackbird
19-10-2000, 18:08
thommy überrascht mich immer wieder..

ich denk mal dass ich mich inzwischen auch einigermassen in linux auskenn (nicht wirklich richtig gut, aber für den hausgebrauch brauchbar, denk ich mal), aber jetzt hinterfragt er sachen von denen ich weder gehört hab noch mir irgend einen reim drauf machen kann...

respekt http://www.linuxforen.de/ubb/biggrin.gif

grüsse blackbird

thommy
20-10-2000, 07:48
Vielleicht doch noch ein paar weiter gehende Worte...

Der eigentliche Sinn der Verdopplung steht außer Frage. Indem der Eingabedeskriptor dupliziert wird, könn(t)en bspw. 2 Prozesse gleichzeitig mit Eingaben von stdin gefüttert werden. Und eine Datei zum Schreiben und Lesen zu öffnen, nutzt man bei Datenbanken, wo man sowohl Daten lesen als auch schreiben möchte, ohne die Datei immer wieder schließen und öffnen zu müssen.

Die Frage ist nun, wie kann ich in der Bash die Fähigkeiten ausnutzen?

Noch ein Beispiel zur Anwendung der Ausgabeverdopplung: Wie gelingt es, dass ich sowohzl stdout als auch stderr in die Eingabe eines Kommandos schleuse?

So geht's:

<pre>
find / -name "igendwas" 2&gt;&1 | less
</pre>

(das Ganze benötige ich für die <a href="http://www.linuxfibel.de/linux/linuxfibel" target="_blank">Linuxfibel</a>; in dem Zusammenhang suche ich ohnehin immer Tipps, Beispiele, Korrekturen...)

Bye,
Thomas

blackbird
20-10-2000, 16:51
hm so gesehen machts nen sinn, den ich sogar nachvollziehen kann http://www.linuxforen.de/ubb/biggrin.gif
aber ne db als bash-script, ich weiss ja ned... http://www.linuxforen.de/ubb/wink.gif http://www.linuxforen.de/ubb/wink.gif http://www.linuxforen.de/ubb/wink.gif

Manfred-B
05-12-2000, 00:03
Hi tommy
Ein sinnvolles Beispiel?

/sbin/init.d/rc:
#################
test -z "$CONSOLE" && CONSOLE=/dev/console
set -- $(stty size < $CONSOLE)
LINES=$1
COLUMNS=$2
export LINES COLUMNS CONSOLE
#......
#
# Redirect I/O of this script and its childs
#
exec 0<> $CONSOLE 1>&0 2>&0
###

Aber: wo ist der Sinn? http://www.linuxforen.de/ubb/wink.gif

Falls $CONSOLE mal /dev/ttySn ist machts dann Sinn?

Das experimentieren mit redirection (zum lesen und schreiben) führt bisweilen zu eigenartigen Effekten; jedoch selten zu den gewünschten. z.B. jedes 2. Kommando auf der console muß man blind eingeben...

Nach dem ersten lesen der Datei gibs nichts mehr auszugeben.
Schreiben jedoch am ende der file geht immer, und wird auch in manchen makefiles angewand. Anders siehts mit /dev/tty* aus.

Gruß

thommy
05-12-2000, 08:10
Auf die Idee, nach so etwas im eigenen System zu suchen, war ich nicht gekommen http://www.linuxforen.de/ubb/wink.gif
Erst einmal ein dickes Dankeschön, das Prinzip zeigt mir nun neue Wege auf, was damit machbar sein sollte:

bspw. Die Verbindung eines Terminals mit der seriellen Schnittstelle und Fernsteuerung des Systems über diese (sinnvoll für embedded Systeme). Muss ich demnächst mal probieren...

Vielen Dank
Thomas

Manfred-B
05-12-2000, 23:18
Hi
Ja sowas hab ich vor ein paar wochen mal gemacht: 2 Linuxkisten über ein Nullmodemkabel vebinden und dann mit den Befehlen cat und echo... zuerst mal probiert
Dazu muß man beide ttySn in den raw modus schalten (mit stty -F /dev/ttyS0 raw 19200 -onlcr -ocrnl crtscts)(oder gründlicher: stty -F /dev/ttyS0 "5:0:800004be:0:0:0:0:0:0:0:1:0:0:0:0:0:0:0:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0:0:0:0"

Und dann ein "Terminal emulieren":
cat /dev/ttyS0 & cat >/dev/ttyS0

Verbindung mit agetty vorher inittab ändern (s1:12345:respawn:/sbin/agetty 19200 ttyS1 linux #in der inittab ändern ;init q)

Das holt dann einen Loginprompt des anderen Rechners auf die aktuelle bash
Aber das redirection hat zum schiffbruch oder bessergesagt zur Konfusion geführt (war auch wieder spät)

nb. Terminal programme gäbe es wie Sand am Meer - der Autor meines Linuxwälzers schweigt aber zu den Namen - gibts auch eins für linux?

Mit cat & cat (s.o.) funktioniert nämlich keine Sondertaste - aber das war ja auch nicht mein Ziel

Hier noch ein Ausriß aus meinen Notes:
######
exec 3> test/find.mist # öffnet eine datei zum schreiben über kanal 3; evtl vorhandene daten im file sind verloren
exec 3>&- # schliest diesen kanal wieder daten sind gespeichert

exec 3<> test/find.mist # öffnet zum lesen und schreiben; daten sind noch vorhanden aber die eingabe erfolgt auf den Anfang der Datei
echo 0<&3
echo "nochmal in die file" 1>&3 # überschreibt also den Anfang der Datei; die ausgabe eines kommandos muß dahin umgeleitet werden wo descriptor Nr.3 schon hinzeigt
cat 0<&3
#######
Falls das jemand lesen will.

Grüsse