Grundlegende,
erste Hinweise.
Hinweise zu bsh32. |
Die bsh (oder bsh32)
braucht gar nicht installiert zu werden!
Wer bsh.exe hat, muß diese nur aufrufen -sonst nichts- und bekommt ein Prompt. Ich sage das, weil die geheimnisvolle 'Installation'
der bsh vereinzelt als schier unüberwindlich geschildert wurde.
Zusätzliche Einrichtungen - falls gewünscht: Bekanntgewordene Anwender-Probleme:
|
bsh32.exe
Diejenigen Zeichen, die Worte voneinander
trennen, sind in der Variablen IFS gespeichert.
In der bsh32 wurden die ersten beiden Zeichen
miteinander ausgetauscht,
bsh-intern wird manchmal nur das erste Zeichen in IFS benutzt, manchmal alle. Es gibt Fälle, da muß das Leerzeichen aus IFS vorübergehend entfernt werden: Das ist stellenweise leider unvermeidbar, wenn Leerzeichen in Dateinamen enthalten sein können!ifs="$IFS" # IFS="\t \r\n" IFS="$( echo %t )" # IFS="\t\r\n" ... IFS="$ifs" # IFS="\t \r\n" (Siehe nächsten Tabellen-Kasten.) Aus diesem Grund gibt es auf keinem Unix-System (angelieferte) Dateinamen mit Leerzeichen! Obwohl unter Unix fast alle 256 Zeichen erlaubt sind! - Ausnahme: nur '/' und '\0'. Mit Leerzeichen in Dateinamen handelt man sich letztlich nur Probleme und Unbequemlichkeiten ein; beispielsweise sind im Internet keine Leerzeichen erlaubt... Dateinamen mit Lücken darin sehen in Auflistungen auch optisch total bescheuert aus; der Unterstrich _ ist ein viel besseres Trennmittel! Signale funktionieren bei bsh32 wesentlich
besser als bei bsh.
Windows (NT):
Die folgende Grafik stammt noch aus der
Zeit als in bsh32.exe der interne Kommandozeilen-Editor
Wie man sieht, habe ich hier bsh32.exe
aufgerufen, und dann als SubShell
Windows NT erzeugt also automatisch eine
jeweils andere Umgebung und Verknüpfung.
Bei Aufruf von command.com sind darin die
Ausgaben schwarz/weiß,
bsh32 hat viele Vorteile gegenüber
bsh.
|
Trennzeichen bei der Wortbildung
Die bsh bewertet die Zeichen in IFS als
Trennzeichen, um aus beliebigen Zeichenketten Worte zu bilden.
Annahme:
aaaaaa
for datei in *ergibt: --aaaaaa--Das ist korrekt, weil der Wildcard-Mechanismus selbst IFS nicht benutzt. Auch folgendes ist korrekt: dateien=*Bei der Zuweisung wurden also die drei Argumente durch TABs getrennt: aaaaaa\tbbb BBB\tcccccc
Hier wurden Zuweisungen in Kommando-Substitutionen gepackt, die als Argument keine Wirkungnamen='aaa bbb,ccc ddd,eee'for n in $(ifs="$IFS";IFS=,) $namen $(IFS="$ifs") do echo "--$n--" done--aaa bbb-- --ccc ddd-- --eee-- haben, weil Zuweisungen nichts ausgeben, und weil ohne Maskierung "...". Die vorübergehende Änderung von IFS wirkt hier nur auf '$namen' . Ein Problem gibt es aber hier: for d in $dateienHier wird der Ausdruck '$dateien' (da er unmaskiert ist/sein muß) gemäß dem Inhalt von IFS in Worte zerteilt. Dies Problem kann aber auf vielfältige Weise gelöst werden:
Die Parser-Fähigkeit von read kann nur verwendet werden durch Anpassung von IFS und ggf. Eingabe von TABs als Trenner. mit dem Kommando conv . Platzhalter=$( echo %01%c ) Die bsh verarbeitet alle Platzhalter von dezimal 1 bis 255. mit dem Kommando tr . wäre zu problematisch, denn Dateinamen sind ja nur eine Wortart von vielen! |
Unter Unix funktioniert -natürlich-
der unveränderte Kommandozeilen-Editor der bsh
auch unter X-Windows in der UNIX-Box: Das unten zu sehende spezielle Prompt kann nur angewandt werden, wenn eine Funktion für Escape-Sequenzen im Ausgabetreiber vorhanden ist - für Win32-Programme fehlt dies im Console-System!
Das ist auch ein Kennzeichen dafür,
daß ich seit etwa 1995 einen gewissen Groll gegen Microsoft hege.
Ich hatte mir nämlich nach MS-DOS 6.22 ein MS-DOS32 1.0 gewünscht, und ... |