Muitos dos sinalizadores que podem ser passados para bash
na linha de comando são set
flags. set
é o shell embutido que pode alternar esses sinalizadores em tempo de execução. Por exemplo, chamar um script como bash -x foo.sh
é basicamente o mesmo que fazer set -x
na parte superior do script.
Sabendo que set
é o shell embutido responsável por isso nos permite saber onde procurar. Agora podemos fazer help set
e obtemos o seguinte:
$ help set
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
...
-x Print commands and their arguments as they are executed.
...
Using + rather than - causes these flags to be turned off. The
flags can also be used upon invocation of the shell. The current
set of flags may be found in $-. The remaining n ARGs are positional
parameters and are assigned, in order, to $1, $2, .. $n. If no
ARGs are given, all shell variables are printed.
...
Então, a partir disso, vemos que $-
deve nos informar quais flags estão ativados.
$ bash -c 'echo $-'
hBc
$ bash -x -c 'echo $-'
+ echo hxBc
hxBc
Então basicamente você só precisa fazer:
if [[ "$-" = *"x"* ]]; then
echo ''-x' is set'
else
echo ''-x' is not set'
fi
Como um bônus, se você quiser copiar todos os sinalizadores, você também pode fazer
bash -$- /other/script.sh