If a script
/path/to/foo begins with
#!/bin/bash, then executing
/path/to/foo arg1 arg2 is equivalent to executing
/bin/bash /path/too/foo arg1 arg2. If the shebang line is
#!/bin/bash -ex, it is equivalent to executing
/bin/bash -ex /path/too/foo arg1 arg2. This feature is managed by the kernel.
Note that you can portably have only one argument on the shebang line: some unices (such as Linux) only accept one argument, so that
#!/bin/bash -e -x would lead to bash receiving the single five-character argument
-e -x (a syntax error) rather than two arguments
For the Bourne shell
sh and derived shells such as POSIX sh, bash, ksh, and zsh:
-e means that if any command fails (which it indicates by returning a nonzero status), the script will terminate immediately.
-x causes the shell to print an execution trace.
Other programs may understand these options but with different meanings.