Mailinglist Archive: opensuse-de (871 mails)

< Previous Next >
Re: Bash-Code: Bitte um Verständnishilfe
Hallo,

Am Sat, 11 Jun 2011, Christian Brabandt schrieb:
Nö. Witzigerweise ist [ ein eigenes binary:

#v+
ls -li /usr/bin/{[,test}
148517 -rwxr-xr-x 1 root root 28300 28. Apr 2010 /usr/bin/[
1126088 -rwxr-xr-x 1 root root 26364 28. Apr 2010 /usr/bin/test
#v-

Hab mal eben coreutils-8.9 von gnu.org gesaugt und gebaut. Ah.

Irgendwann sind die GNUler wohl auf die glorreiche Idee gekommen,
/bin/test (ist per "define" aber umschaltbar) zu nem 'dummy' binary zu
machen, das wohl (soweit ich das auf den ersten Blick verstehe) das
shell-builtin test "anspringt". Das "echte" test gibt's dann als '['.

Siehe src/lbracket.c (ein define + include) und src/test.c in den
coreutils sourcen. IMO ein sehr seltsame Entscheidung. Naja, anderswo
fragt man sich ja AFAIK gerüchtehalber schon länger, was die GNUler so
alles rauchen.

In den meisten Shells, wird aber test bzw. [ als selber implementiert,
was bedeutet, dass diese Binaries von der Shell gar nicht mehr
aufgerufen werden (und daher auch oft andere Features unterstützen)

Genau. "Shell Builtin". /usr/bin/test und /usr/bin/[ sollten "im
Normalbetrieb" nicht aufgerufen werden. Auch in busybox/sash sind
beide mit drin. Deswegen auch mein Hinweis auf help test / man
bashbuiltins nebenan. Und 'test ...' statt '[ ... ]' ist schon wg. der
nötigen Leerzeichen vor und nach '[' und vor ']' sinnvoll. Das '[' ist
eben keine Shell-Syntax wie '{', '(', '[[' und '((' (sowie $() und
$(())). Das sind beliebte Anfängerfallen. Mit 'test' hat man das
Problem nicht und der Anfänger lernt auch gleich, daß sie/er mit
z.B. 'if' _JEDES_ Programm oder Builtin, das bei Erfolg 0 und sonst
was != 0 liefert verwenden kann. 'test' ist nur ein leicht
überdurchschnittlich häufig verwendetes.

Ich habe ja immer gedacht, dass eines der beiden binaries auf das andere
hardgelinkt ist. Das sieht aber nicht so aus. Jetzt frag mich aber
nicht, was die Unterschiede zwischen beiden sind.

So war's auch mal. Use the source, Lu^WChris!

==== Changelog* ====
2003-06-30 Paul Eggert <eggert@xxxxxxxxxxx>

Add support for a "[" that conforms to the GNU coding standards,
i.e., that does not depend on its name.
* src/lbracket.c: New file.
* README: Add "[".
* man/Makefile.am (programs): Ignore "[", since it doesn't have
a separate man page.
* src/Makefile.am (bin_PROGRAMS): Add "[".
(__SOURCES): New var.
* src/test.c (LBRACKET): Define to 0 if not defined.
(main): Use LBRACKET rather than argv[0].

* src/test.c (one_argument): Do not check for -t if POSIXLY_CORRECT.
Reported by Paul Jarc and Dan Jacobson.

* src/test.c (main): Do not recognize --help or --version if
POSIXLY_CORRECT, when invoked as "test". Handle "[ ]" correctly.
Do not bother testing that margv[margc] is non-null.
====

das müßte es sein.

==== NEWS ====
* Major changes in release 5.0.1 (2003-07-15):

** New programs
- new program: `[' (much like `test')
====

Äh, ich verkneif mir jetzt mal nen Kommentar.

Bei Interesse könnte ich mal meine und mir geschenkten SUSE CDs/DVDs
einwerfen und schauen, ab welcher Version [ und test keine hardlinks
mehr sind. (Hm, da fällt mir ein, ich hab schon so einige ISO images
auf der Platte ... und dann könnte man auch noch /var/lib/pin
auffüllen ... ;)

-dn'oldschool'h

PS: diesmal keine Zufallssig.

--
"Anybody who really thinks /bin/true should report a version number and
a help string (or even a copyright notice) needs to get his head examined."
-- Linus Torvalds
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >