Как разрешить bash subshell унаследовать параметры родительского набора?
Допустим, что я set -x в script "a.sh", и он вызывает другой script "b.sh".
Можно ли разрешить "b.sh" наследовать параметр -x из "a.sh"?
Ответ 1
export SHELLOPTS
например:
echo date > b
chmod +x b
без экспорта, мы видим только команды в ./a, когда он вызывает ./b:
$ echo ./b > a
$ bash -xv a
./b
+ ./b
Sun Dec 29 21:34:14 EST 2013
но если мы экспортируем SHELLOPTS, мы увидим команды в ./a и ./b
$ echo "export SHELLOPTS; ./b" > a
$ bash -xv a
./b
+ ./b date
++ date
Sun Dec 29 21:34:36 EST 2013
Ответ 2
Так как -x не наследуется подоболочками, вам нужно быть более явным. Вы можете проверить, когда -x используется с специальным параметром $-.
if [[ $- = *x* ]]; then
# Set the option, then *source* the script, in a subshell
( set -x; . b.sh )
else
# Simply run the script; subshell automatically created.
./b.sh
fi
Ответ 3
Они будут включены в script b, если script b источники script a. Что может или не может решить вашу проблему для вас!
Ответ 4
Как и @devnull, вы можете использовать операцию . в script.
В a.sh
. SETVALUES
В b.sh
. SETVALUES
В SETVALUES
set -x
Когда вы вызываете SETVALUES, эти значения будут установлены в этой подколле.