Nice solution.
Alternatively, you could have done:
$ . ./cvsswitch two
Notice the '. ' before the command, which executes the command in the
current shell without starting a new one.
Scott wrote:
> Alex,
>
> The script itself is a shell session, so as soon as it ends, all
> information contained within would be eliminated and not carried over to
> your current environment. A solution is to functionalize the script,
> like this:
>
> ----------------------------------------------------------
> cvsswitch() {
> echo "Selected server : "$1;
>
> case "$1" in
> one)
> CVSROOT=":ext:alex@cvs.one.net
> <mailto:alex@cvs.one.net>:/var/lib/cvs"; export CVSROOT;
> ;;
> two)
> CVSROOT=":ext:alex@cvs.two.net
> <mailto:alex@cvs.two.net>:/var/lib/cvs"; export CVSROOT;
> ;;
> *)
> echo '???';
> exit 0;
> esac
>
> echo "CVSROOT value at end of script : "$CVSROOT;
> exit 0;
> }
> ----------------------------------------------------------
>
> As you can see, the command name remains the same, and you would just
> have to write the script *into* your ~/.bash_profile and source it and
> it would then work within any environment instead of within its own.
> Hope this helps.
>
> -Scott
>
>
> Alex Dean wrote:
>
>> I'm using bash (on OSX). In ~/.bash_profile, I have a CVSROOT
>> variable set so I can connect to 1 CVS server. I occasionally want to
>> connect to another cvs server, so I wrote a shell script to set a new
>> CVSROOT value for me. The script appears to set the value correctly,
>> but it doesn't change my environment settings outside of the script.
>> It seems like it's a global vs. local variable issue. (CVSROOT is set
>> differently within the context of the script, but is the change is
>> forgotten when the script exits.) I don't do shell scripts very
>> often, so I'm probably missing something really obvious. How do I
>> tell the script I want to change the value 'for real'?
>>
>> This is the script :
>> #!/bin/sh
>> echo "Selected server : "$1;
>>
>> case "$1" in
>> one)
>> CVSROOT=":ext:alex@cvs.one.net
>> <mailto:alex@cvs.one.net>:/var/lib/cvs"; export CVSROOT;
>> ;;
>> two)
>> CVSROOT=":ext:alex@cvs.two.net
>> <mailto:alex@cvs.two.net>:/var/lib/cvs"; export CVSROOT;
>> ;;
>> *)
>> echo '???';
>> exit 0;
>> esac
>>
>> echo "CVSROOT value at end of script : "$CVSROOT;
>> exit 0;
>>
>> And here's a session which -should- switch from server 'one' to server
>> 'two', but it doesn't...
>>
>> sod:~/scripts alex$ echo $CVSROOT
>> :ext:alex@cvs.one.net <mailto:alex@cvs.one.net>:/var/lib/cvs
>> sod:~/scripts alex$ ./cvsswitch two
>> Selected server : 'two'
>> CVSROOT value at end of script : ':ext:alex@cvs.two.net
>> <mailto:alex@cvs.two.net>:/var/lib/cvs'
>> sod:~/scripts alex$ echo $CVSROOT
>> :ext:alex@cvs.one.net <mailto:alex@cvs.one.net>:/var/lib/cvs
>> sod:~/scripts alex$
>>
>> You can see the script set the variable correctly, but the change
>> didn't apply outside of the script. Why doesn't this work?!
>>
>> thanks,
>> alex
>> .
>>
>>
>>
--
-Eric 'shubes'
"There is no such thing as the People;
it is a collectivist myth.
There are only individual citizens
with individual wills
and individual purposes."
-William E. Simon (1927-2000),
Secretary of the Treasury (1974-1977)
"A Time For Truth" (1978), pg. 237
****************************************************
This message has been scanned using Contraxx
Technology Group mail server v8.0.3 and is virus free.
Message sent from Mail Server 3
****************************************************
---------------------------------------------------
PLUG-discuss mailing list -
PLUG-discuss@lists.plug.phoenix.az.us
To subscribe, unsubscribe, or to change you mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss