DVM - D Version Manager

Jacob Carlborg doob at me.com
Wed Jan 26 12:41:02 PST 2011


On 2011-01-26 21:04, "Jérôme M. Berger" wrote:
> Jacob Carlborg wrote:
>> On 2011-01-25 23:59, Jesse Phillips wrote:
>>> Jacob Carlborg Wrote:
>>>
>>>> Yeah, I guess you're right, didn't think there were a lot people who
>>>> used other shells. Since I almost know nothing about shell scripting and
>>>> even less about non-bourne shells, will it be possible to port to other
>>>> shells? How much do they differ?
>>>>
>>>> --
>>>> /Jacob Carlborg
>>>
>>> To add to Lutger's message. I believe it is sh that is required by all
>>> Posix systems, or at least an equivalent. Similarly I think vi is also
>>> a requirement.
>>>
>>> In all likelyhood you probably used a Bash specific feature, but
>>> usually everyone has bash even if they use zsh... Though Ubuntu/Debian
>>> has started pointing /bin/sh to dash which is complaint with posix...
>>
>> Ok. I'll see I can use only sh.
>>
> 	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?

> - 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.

> 		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.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-announce mailing list