Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`exit` inside parentheses doesn't exit script

Tags:

linux

bash

Here is a simple question. Why does this not behave the way I think it would:

(echo "Test 1"; exit) && echo "Test 2"

...or...

VAR1=1
VAR2=2
[ $VAR1 == $VAR2 ] || (echo '$VAR1 does not equal $VAR2, exiting.'; exit)
echo -e 'Well, I\'m still alive yo!'

Running either of those two snippets will result in script execution continuing despite an explicit exit command.

Obviously the parentheses are affecting the command for some reason, my question is why?

like image 514
jduncanator Avatar asked Nov 10 '13 06:11

jduncanator


1 Answers

From http://tldp.org/LDP/abs/html/subshells.html

A command list embedded between parentheses runs as a subshell.

( command1; command2; command3; ... )

A code block between curly brackets does not launch a subshell.

{ command1; command2; command3; . . . commandN; }

In the first case the exit is being run by the sub shell which terminates and returns control to the invoking shell.

like image 187
michael issartel Avatar answered Sep 27 '22 23:09

michael issartel