How can I keep the environment variables, set from a shell script, after the script finishes running?
Environment variables exist the the environment that is private to each process. The shell passes a COPY of exported variables to it's children as their environment, but there is no way for them to pass their environment back to the parent or any process other than their children.
You can print those variables and load them into the parent.
Or as has been already mentioned, you can run your script in the current shell with either "source script" or ". script" (and you might need ./script if . isn't in your PATH).
Some tools print their vars and the shell can load them using backticks like ssh-agent
. That way whatever ssh-agent prints will be run as a command. If it prints something like "VAR1=VAL;VAR2=VAL2" that may do what you want.