xpg4_sh(1) xpg4_sh(1)
NAME
xpg4sh - XPG4-Shell
SYNTAX
/sbin/xpg4/sh [option ...] [datei] [argument ...]
BESCHREIBUNG
Die XPG4-Shell ist weitestgehend identisch mit der Korn-Shell [vgl.
ksh(1)]. Da die Korn-Shell aber nicht alle Bedingungen erfüllt, die
von X/Open (siehe CAE Specification, Commands and Utilities, Issue 4)
für die Shell gefordert werden, wird eine Shell unter /sbin/xpg4/sh
mitausgeliefert, die auch die restlichen Bedingungen von XPG4 (X/Open
Branding) erfüllt.
Die Korn-Shell ksh wurde nicht vollständig an XPG4 angepaßt, weil sie
sich in vielen Fällen eher wie die Bourne-Shell sh verhalten soll. Um
in solchen Fällen nicht inkompatibel zum bisherigen Verhalten der
Korn-Shell zu werden, wurden die Änderungen gesondert für eine spe-
zielle XPG4-Shell durchgeführt.
Zur Zeit ist die Standard-Shell (/sbin/sh) auf die Bourne-Shell
gelinkt (/sbin/bourne/sh). Wünscht man als Standard-Shell die XPG4-
Shell, so muß der Link auf /sbin/xpg4/sh gesetzt werden.
Unterschiede zwischen der Korn-Shell und der XPG4-Shell
1. Wird beim Aufruf der Shell hinter der Option -o nichts angegeben,
so gibt die XPG4-Shell folgende Meldung auf die Standardfehleraus-
gabe aus: ksh: '': bad option(s).
Die Korn-Shell gibt dagegen die erlaubten Optionen auf die Stan-
dardausgabe aus.
2. Bei der Korn-Shell ist time am Zeilenanfang ein Schlüsselwort (wie
if, then usw.; vgl. ksh(1), Abschnitt Reservierte Wörter). Bei der
XPG4-Shell (wie auch bei der Bourne-Shell) ist time ein normales
Benutzerkommando (/usr/bin). Abweichungen bezüglich time machen
sich wie folgt bemerkbar.
Das Verhalten des Aufrufs
time pipeline
ist unterschiedlich. So werden bei der Korn-Shell die Kommandos der
Pipeline ausgeführt und anschließend in einer Statistik die ver-
strichene Zeit, die Benutzer- und die Systemzeit für diese Komman-
dos auf die Standardfehlerausgabe ausgegeben.
Bei der XPG4-Shell wird time nur für das 1. Kommando der Pipeline
ausgeführt und die Statistik schon vorher ausgegeben.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
xpg4_sh(1) xpg4_sh(1)
So führt ein Aufruf
time ls | pg
bei der Korn-Shell dazu, daß man zunächst die Ausgabe von ls sieht
und die Eingabe von pg durchführen muß. Erst wenn alles beendet
ist, wird die Statistik für ls und pg ausgegeben.
Bei der XPG4-Shell wird zuerst die Statistik ausgegeben, und dann
folgen die Ausgaben von ls sowie die Eingaben für pg.
3. Bei der Korn-Shell wird eine Fehlermeldung ausgegeben, wenn das
echo-Kommando beim Schreiben in eine Datei nicht schreiben kann,
weil die Platte voll ist. Der Endestatus ist dann 1. Die XPG4-Shell
ignoriert diesen Fehler.
4. Die Korn-Shell verliert bei dem folgenden getopts-Kommando keinen
Parameter, wenn das Shell-Skript z. B. mit -l abc aufgerufen wird.
Die XPG4-Shell gibt beim 2. Aufruf echo $* nur noch -l aus anstatt
-l abc:
#!/sbin/ksh
set -x
echo $*
while getopts :l:u:t: arguments
do
case $arguments in
l) ;;
u) ;;
t) ;;
*) echo "wrong option \n"
exit 1
;;
esac
done
echo $*
5. Wird bei einer Readonly-Variablen (typeset -r) versucht, den Wert
zu verändern, so liefern Korn-Shell und XPG4-Shell die Fehlermel-
dung " ...: is read only".
Der Unterschied sieht so aus, daß bei der XPG4-Shell die Fehlermel-
dung bewußt etwas später erzeugt wird.
6. Die Korn-Shell liefert bei einer Funktion in einem Shell-Skript in
$0 den Funktionsnamen, die XPG4-Shell liefert auch dort den Namen
des Shell-Skripts.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
xpg4_sh(1) xpg4_sh(1)
Beispielsweise in folgendem Shell-Skript mit Namen test.sh:
typeset -fux dummy
function dummy
{
echo $0
}
dummy
Die Korn-Shell echot dummy, die XPG4-Shell echot test.sh.
SIEHE AUCH
ksh(1), sh(1).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98