This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: /etc/profile


Eric Blake <eblake <at> redhat.com> writes:
> Unfortunately, at least your windows system dll directory has to be on
> PATH, or cygwin1.dll will fail to load, so blindly removing ALL windows
> paths from PATH is wrong.

At that point cygwin1.dll is already loaded and so far I haven't seen anything
not working due to that change.  But yes, I didn't think of that, so I'm curious
why it seems to work as nicely as it does.

> A missing /etc/skel is a sign of mis-installation, but extra guards
> won't hurt, I guess.

Specifically, that fail would induce the copy of files from whatever the current
directory is into whatever HOME is set to.  I guess that could potentially cause
a lot of damage...

> But you are wrong about the LC_COLLATE command
> having no effect.

I didn't say it doesn't have an effect.

>  Remember, the shell is required to expand globbing
> prior to executing a command, but that LC_COLLATE affects how globbing
> is performed.

Yes, I missed that globbing was performed before the change in locale treatment
went active.

>  Therefore, you MUST separate the assignment from
> LC_COLLATE from the globbing, if the globbing is to be affected (for
> that matter, if LC_ALL is set, then it overrides LC_COLLATE, so it may
> be better to patch this particular usage to set LC_ALL instead of
> LC_COLLATE).

Yes, that seems like a good idea, even though I can't imagine why LC_ALL would
already be set at that point... OK, it gets imported when I set it from Windows
System Properties.  I'll have to think about unsetting these unconditionally,
then.

> but that is not safe for files containing whitespace.  If you want
> safety, then we should avoid the $() and use globbing directly, although
> it gets much longer with something like this:

That saves us a fork, so it may even be a net win, on the other hand forking a
subshell saves us the restore of LC_ALL...  How about this, then (which doesn't
fork and handles spaces correctly):

profile_d ()
{
  for file in /etc/profile.d/*.$1 ; do
    [ -e "${file}" ] && . "${file}"
  done
  unset file
}

and then calling it like this:

  LC_ALL=C profile_d *.sh

The "unset file" could also go if the call included a "file= ",
I'd think.


Thanks for having a look.


Regards,
Achim.


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]