[linux-l] Umgebungsvariable mit . im Namen

Volker Grabsch vog at notjusthosting.com
Mo Aug 13 13:04:11 CEST 2007


On Mon, Aug 13, 2007 at 12:25:35PM +0200, Rocco Melzian wrote:
> > steffen at link:~> env ABLE.PREFDIR=/tmp bash
> > steffen at link:~> env|grep ABLE
> > ABLE.PREFDIR=/tmp
> 
> me at dirac:~/> env ABLE.PREFDIR=/tmp bash
> bash: module: command not found

Sieht so aus, als wäre "env" bei dir ein Alias auf irgendwas.
Mit meiner Bash zu Hause klappt's jedenfalls.

> Mit sh funktioniert es dann ...

"sh" ist meistens eh nur dir Bash in einem Kompatibilitätsmodus. ;-)

> me at dirac:~/> env ABLE.PREFDIR=/tmp sh
> sh-2.05b$ env | grep ABL
> ABLE.PREFDIR=/tmp

Das Environment ist korrekt gesetzt. Mehr kannst du nicht verlangen.

> ... fast ...
> 
> sh-2.05b$ echo $ABLE.PREFDIR
> .PREFDIR

Dieser Befehl ist äquivalent zu:

    echo ${ABLE}.PREFDIR

Das heißt, die Shell sucht nach einer Variablen "$ABLE". Diese gibt's
nicht, also bleibt nur noch ".PREFDIR" übrig. Kein Fehler, alls richtig!

> > steffen at link:~> env ABLE.PREFDIR=/tmp ./komischeSoftware

Das sollte eigentlich funktionieren!

Es sei denn, "komischeSoftware" ist ein Shellscript. Wenn in diesem
Shellscript tatsächlich sowas wie "$ABLE.PREFDIR" drinsteht, dann
hast du aber eh keine Chance. Dann ist das Shellscript schlicht und
ergreifend falsch. (siehe oben)

Falls es aber kein Shellscript ist: Könnte es sein, dass es die
Umgebungs- variable "able.prefdir" statt "ABLE.PREFDIR" abfragt?
Es scheint ja offenbar nur unter Windows getestet worden zu sein,
und da sind Umgebungsvariablen case-insensitive.

> Habe jetzt gesehen, dass man den Pfad auch per Option übergeben kann:
> 
> me at dirac:~/>java -Dable.prefdir=/tmp -jar myProg.jar
> 
> So funktioniert es jetzt zuverlässig. Wieso nur vergibt jemand so 
> "ungewöhnliche" Umgebungsvariablennamen, machen nur Ärger ...

Windows-Programmierer, die nicht nicht auf Portabilität achten.
Java-Programme sind schließlich schon per Definition portabel ...

Hab vor ein paar Wochen eine PHP-Applikation mit dem selben Denkfehler
gesehen: Überall tauchen absolute Pfade (D:\...) und hardgecodete URLs
auf. Läuft ja in einem Windows-2000 in einem Vmware. Vmware ist ja
portabel, und sein lokales Netzwerk kann man ja jederzeit auf die
vorgegebenen IPs umstellen ...

Kann man nichts machen. *sigh*


Gruß,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l