[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash Frage



Ulrich Fürst schrieb am Dienstag, 28. August 2007 um 21:35:18 +0200:
|"Helmut H. Franke" <helmut.franke@student.uni-augsburg.de> wrote:
|> 
|> Z. B. unbekannt ist das Prädikat [
|
|Aus der man page: 
|SYNOPSIS
|test EXPRESSION 
| test 
|
| [ EXPRESSION ] 
| [ ] 
| [ OPTION
|
|Warum sollte [ dann unbekannt sein?

Ist das aus der us-manpage des externen Programmes test
(/usr/bin/test,/usr/bin/[)?  Ab Zeile 16 steht dort, was man
als EXPRESSION verwenden kann und wie und welche Optionen es
gibt.  Wie man der Syntaxdarstellung entnehmen kann,
funktionieren die Optionen nur beim Aufruf mit [, nicht bei
Aufruf mit test.  Ob das externe Programm aber überhaupt
verwendet wird, hängt davon ab, welche shell du verwendest
und wie diese eingestellt ist.  Bei vielen Systemen ist
/usr/bin/[ ein symbolischer Link oder seltener ein Hardlink
auf /usr/bin/test, meist ist es ein Symlink.  Bei meinem
debian hier sind test und [ seltsamerweise 2 verschiedene
Programme mit verschiedener Größe.  Das scheint in dieser
Distribution (stable) ein Fehler zu sein.  Mit der bash
werden diese beiden externen Programme aber bei
Standardeinstellung nicht verwendet, sondern es werden die
bash-builtins test und [ verwendet.  (Ich weiß nicht, ob das
für alle Versionen der bash gilt.)

Bei dem Zitat ist [ jewils ein Programmname, keine Option
und nicht Teil des EXPRESSION.  Aus der Tatsache, dass ein
Programm [ heißt, kann man nicht schließen, dass dieses
Programm auch eine Option verstehen und verwenden muß, die
auch [ heißt.

Die Variante 
[ OPTION
funktioniert bei mir mit dem bash builtin [ nicht, aber mit
dem externen /usr/bin/[.

Versuch mal in bash das Kommando

type test [

Wenn du die builtins test und [ verwendest, ist das oben
sowieso die falschs manpage und du mußt bei

man bash       (Zeile 1952 ff.)
info bash
help test
help [

nachsehen.  Oder du mußt vor dem Aufruf die shell so
umkonfigurieren, dass sie die externen Programme für test
und [ startet, oder die externen Programme explizit durch
komplette Pfadangabe laden, also nicht

test -e $verzeichnis/$datei

, sondern

/usr/bin/test -e $verzeichnis/$datei

im shellscript schreiben.  Vielleicht geht das auch noch
anders.  Die bultins und die externen Programme für test und
[ sind aber sehr ähnlich.


Alles Gute
Helmut H. Franke

-- 
Servamus vitam terramque istam, quas amans pater noster ipse dedit nobis!



Reply to: