On 2011-01-27 23:34, "Jérôme M. Berger" wrote:
Jacob Carlborg wrote:
On 2011-01-26 21:04, "Jérôme M. Berger" wrote:
     You cannot. You need to modify the environment for the current
shell, which is the shell that the user is currently using (no
matter what else may or may not be installed on the system). This
has two consequences:

- You need to have some code that is run when the shell starts (i.e.
from .bashrc, .zshrc or .kshrc). That code will define the proper
aliases and/or functions (at the time being, this is mostly the
"dvm" function in "dvm.sh" (*)). This can be accomplished by having
a different version of this file for each shell;

Is it possible to detect what shell is running and then load the correct
version?

        Since each shell sources a different file on startup, you can
source the correct version from the startup file. On installation,
the SHELL environment variable should tell you which shell is used.

Ah, right. Didn't think of that.

- You need to generate the contents of $dvm_result_path in a format
that the shell will understand. The easiest way to do that is
probably to define a few extra functions in "dvm.sh" to enable
setting environment variables in a portable way and handle
additional requirements (like "builtin hash -r" which is definitely
a bash-ism). Then generate the $dvm_result_path using these
functions instead of the normal shell syntax.

The contents of $dvm_result_path will only export one variable.

        Do not you need to call "builtin hash -r" each time you change the
path (I do not know since I am not a bash user)? If not, why do you
need to call it in __dvm_setup_environment?

I don't know actually. I'll have to test that.

         Jerome

(*) BTW, I hope you do not add the full contents of dvm.sh nor a
"source dvm.sh" in .bashrc the way it is now. Otherwise, a
misconfiguration may prevent the user from starting a shell!

OK, how else can I do the same thing? BTW this is how RVM (Ruby Version
Manager) works, where I got the idea from. The whole RVM is written in
shell script and it's sourced in .bashrc.

        Remove the call to exit and wrap the rest of the file in a "if [[ !
-z "$dvm_prefix" ]] ; then ..." So the file will look like:

==============================8<------------------------------
if [[ -z "$dvm_prefix" ]] ; then

         if [[ -n "$HOME" ]] ; then
         dvm_prefix="$HOME/."
         else
         echo "No \$dvm_prefix was provided and "
         echo "$(id | \sed -e's/^[^(]*(//' -e 's/).*//') has no
\$HOME defined."
         fi
fi

if [[ ! -z "$dvm_prefix" ]] ; then
        ...
fi
------------------------------>8==============================

                Jerome

Yeah, I kind of notice that. The "exit" didn't work out that well.

--
/Jacob Carlborg

Reply via email to