Archiv verlassen und diese Seite im Standarddesign anzeigen : Umgang mit Deskriptoren in der Bash
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
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>&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ß
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.