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:/var/lib/cvs"; export CVSROOT; ;; two) CVSROOT=":ext: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:/var/lib/cvs sod:~/scripts alex$ ./cvsswitch two Selected server : 'two' CVSROOT value at end of script : ':ext:alex@cvs.two.net:/var/lib/cvs' sod:~/scripts alex$ echo $CVSROOT :ext: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 .