On Tue, Aug 16, 2011 at 01:23:23PM -0400, Ken Wesson spake thus:
> On Tue, Aug 16, 2011 at 1:20 AM, Alan D. Salewski <salew...@att.net> wrote:
> > On Tue, Aug 16, 2011 at 12:34:39AM -0400, Ken Wesson spake thus:
> >> On Mon, Aug 15, 2011 at 11:13 AM, mrwizard82d1 <mrwizard8...@gmail.com> 
> >> wrote:
> >> > I understand that the 1.3 beta plans to add an environment variable
> >> > named clojure.load.path to provide a "CLASSPATH" mechanism for Clojure
> >> > on the CLR.
> >> >
> >> > Although I use Windows, I have installed cygwin because I prefer the
> >> > Unix tool set to that provided by Windows. Although a Windows console
> >> > allows one to set environment variables like "clojure.load.path," the
> >> > bash shell does not.
> >>
> >> Are you sure there isn't some form of quoting or escaping that will
> >> make that name acceptable to bash?
> >
> > Identifiers in bash may contain only alphanumeric characters and
> > underscores, and must start with an alphabetic character or underscore;
> > there's no way to get around that with escaping or quoting.
> 
> Pardon me, but that seems to be missing the point.

Your point, to which I was responding, was that there might be "some
form of quoting or esacaping" that would make the environment variable
with the name 'clojure.load.path' "acceptable to bash". My point,
offered only to help avoid wasting time going down that path of
investigation, is that there is not, with the implied reason that
environment variable manipulation in bash can only be performed on
environment variables that are valid bash identifiers.

Based on your addions below, it is now clear that you are only talking
about the ability of bash to "pass through" to its children an
environment variable that it was provided by it's parent process. I
would describe that level of capability as "tolerance", not "acceptance".

It is the default behavior of bash 4.1 and newer for environment
variables received from the parent process that are not valid bash
identifiers: they are "passed through" to the environment of child
processes, despite the fact that they have not been (and cannot be)
explicitly exported. Tolerance.

Acceptance, in my view, would include the ability to query the current
environment for the value, and the ability to manipulate the value seen
by subprocesses using the common approach on a per-invocation basis:

    $ SOMEVAR=SOMEVAL /path/to/command [arg[ arg...]]

without resorting to 'env' or other hacks, which is not the case:

    $ ALJUNK_CRAP=junk /bin/bash -c set | grep ALJU
    ALJUNK_CRAP=junk

    $ ALJUNK.CRAP=junk /bin/bash -c set | grep ALJU
    bash: ALJUNK.CRAP=junk: command not found

    $ /usr/bin/env -- ALJUNK_CRAP1=junk1 ALJUNK.CRAP2=junk2 /bin/bash -c env | 
grep ALJU
    ALJUNK.CRAP2=junk2
    ALJUNK_CRAP1=junk1

    $ /usr/bin/env -- ALJUNK_CRAP1=junk1 ALJUNK.CRAP2=junk2 /bin/bash -c set | 
grep ALJU
    ALJUNK_CRAP1=junk1


> You don't need a
> bash-language variable named "clojure.load.path", you just need to set
> a Windows environment variable named "clojure.load.path", and the
> rules for what characters are allowed in the names of Windows
> environment variables will still be those set by Windows, which
> apparently permit periods. As far as your bash script is concerned,
> "clojure.load.path" probably needn't be anything more than an opaque
> string passed to the host operating system via a call of some kind --
> though that string could conceivably require quoting or escaping where
> it's embedded as a literal in the script.
> 
> If bash has its own environment variable system, then that could be
> confusing you,

The only confusion is that you and I read differently mrwizard82d1's
question, which set the tone for the thread:

    "How do we plan to support an alternative name that can be used by
     people running Clojure-CLR from within cygwin?"

You approached the question from the perspective of one just wanting to
launch Clojure-CLR with a 'clojure.class.path' value inherited from the
host OS, however that can be made to work.

I approached the question from the perspective of one wanting to invoke
Clojure-CLR with the ability to manipulate the value of
'clojure.class.path' "on-the-fly" in a way that is common and natural
for *nix folks.

The answer at the moment (as with many things related to cygwin) seems
to be that basic usage will "just work"; other usage will be possible
but more cumbersome.

-Al


%!PS Unix and Linux allow periods to be used in environment variable
     names, too. Whether it's a good idea to actually use a variable
     name that cannot be manipulated as a valid POSIX shell identifier
     is a matter for a debate I do not wish to get into.


> but then even if you succeeded it wouldn't work; the
> Clojure tools won't see bash's internal system, only the host OS's, so
> it's the host OS environment variables you need to get at regardless.



-- 
-----------------------------------------------------------------
a l a n   d.   s a l e w s k i          salew...@worldnet.att.net
1024D/FA2C3588 EDFA 195F EDF1 0933 1002  6396 7C92 5CB3 FA2C 3588
-----------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to