D2 port of Sociomantic CDGC available for early experiments

Leandro Lucarella via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Oct 11 16:23:11 PDT 2014


Andrei Alexandrescu, el 10 de October a las 21:25 me escribiste:
> On 10/10/14, 7:54 PM, Walter Bright wrote:
> >On 10/10/2014 5:45 PM, Leandro Lucarella wrote:
> >>I still don't understand why wouldn't we use environment variables for
> >>what they've been created for, it's foolish :-)
> >
> >Because using environment variables to tune program X will also affect
> >programs A-Z.
> 
> Nope. Try this at your Unix command prompt:
> 
> echo $CRAP
> CRAP=hello echo $CRAP
> CRAP=world echo $CRAP

Your example is actually broken, because this is parsed by the shell
separately, CRAP=hello is passed as an env variable to the echo command
but the $CRAP expansion is evaluated before the command is called, so it
will always have the value that had before every echo call (which is
empty if you didn't define it before running those 3 commands).

But try this for example: LANG=nonexistent perl /dev/null
And see how your perl complaints.

But anyway, yeah, that's the idea, there are many ways to define
environment variables, and usually you never do so globally (except for
things that you really want to affect the whole system, like the
language). That doesn't mean you can't override it for a particular
program.

You can also create scripts to run programs, this is how Firefox runs
for example:

---
$ file /usr/bin/firefox 
/usr/bin/firefox: symbolic link to `../lib/firefox/firefox.sh' 
$ file /usr/lib/firefox/firefox.sh
/usr/lib/firefox/firefox.sh: POSIX shell script, ASCII text executable
$ grep -v '^#' /usr/lib/firefox/firefox.sh | head

set -e



MOZ_LIBDIR=/usr/lib/firefox
MOZ_APP_LAUNCHER=`which $0`
MOZ_APP_NAME=firefox
MOZ_DEFAULT_PROFILEDIR=.mozilla/firefox
MOZ_PROFILEDIR=.mozilla/firefox

---

It basically defines a bunch of environment variables and run the
binary. This is a super common practice in posix systems. We are not
inventing anything here. I don't know how windows or other OSs deal with
defining environment variables in a script.

Very basic facilities are always configured this way, for example try
man 3 mallopt to see how can you change options in the malloc
implementation using environment variables...

-- 
Leandro Lucarella (AKA luca)                     http://llucax.com.ar/
----------------------------------------------------------------------
Ladrón no es cualquiera, ladrón es quien usurpa el bien ajeno en
beneficio propio, si no, no.
	-- Ricardo Vaporeso


More information about the Digitalmars-d-announce mailing list