bash recursive xtrace
Is there any way to run bash script X so that if X call executable bash script Y then Y starts by 'sh -eux'?
#!/bin/sh echo OK
It is possible to make a subshell run using the same shell options set in the parent by exporting the SHELLOPTS environment variable.
In your case where X.sh and Y.sh cannot be edited, I'd create a wrapper script that simply exports SHELLOPTS before calling X.sh.
#!/bin/sh # example X.sh which calls Y.sh ./Y.sh
#!/bin/sh # example Y.sh which needs to be called using sh -eux echo $SHELLOPTS
#!/bin/sh -eux # wrapper.sh which sets the options for all sub shells export SHELLOPTS ./X.sh
Calling X.sh directly shows that -eux options are not set in Y.sh
[lsc@aphek]$ ./X.sh braceexpand:hashall:interactive-comments:posix
Calling it via wrapper.sh shows that the options have propagated to the subshells.
[lsc@aphek]$ ./wrapper.sh + export SHELLOPTS + ./x.sh + ./y.sh + echo braceexpand:errexit:hashall:interactive-comments:nounset:posix:xtrace braceexpand:errexit:hashall:interactive-comments:nounset:posix:xtrace
Tested on GNU bash, version 3.00.15(1)-release. YMMV.