Как разрешить 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, эти значения будут установлены в этой подколле.