4

I'm using set -e to force my script to exit whenever an error occurs running a command. However this has the side effect of closing my putty terminal window that I am using to connect via SSH to the host.

How do I stop the terminal from closing?

DD.
  • 3,114
  • 11
  • 35
  • 50

1 Answers1

15

How are you running the script? The circumstances of a subprocess's exit shouldn't affect the shell that ran it... unless you're sourcing the script into your running shell.

For example...

./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it

A 'nix shell is a running process of some shell interpreter (e.g., bash, ksh, csh). "source"ing a script (which you can do in bash with the command source or its alias .) tells that interpreter to open the indicated file and process its contents. In effect, the script becomes a shortcut for entering commands interactively. Functions defined, variables set, and (in your case) exits processed take effect in the original shell.

./my-script.sh is a simple file path. ./ refers to the current directory and my-script.sh to a script within that directory. When the file is marked as executable, the file will be executed. In the case of a script, this means launching a new interpreter process (as defined by the #! line at the top of the script, or /bin/sh by default) and using it to interpret the script. Functions defined, variables set, and exits processed are confined to that new interpreter process.

anderbubble
  • 226
  • 3
  • 7
  • You are right I am using ". my-script". Can you explain the difference please? – DD. Jul 09 '12 at 06:59
  • 3
    To put it inelegantly, "./my-script.sh" means "run the program ./my-script.sh" as a new process. ". my-script.sh" means "make this script part of my current process". – Jenny D Jul 09 '12 at 07:04
  • I edited my answer to add further explanation, as requested. – anderbubble Jul 09 '12 at 07:39
  • 1
    Man, I cannot believe all this time I was reconnecting, logging in, setting up environment and executing because of this minor quirk! lol! – Michal Ciechan Feb 05 '16 at 23:12