Ответ 1
У меня была та же проблема, и я смог найти решение, которое не использует подоболочку:
set -x
command
{ set +x; } 2>/dev/null
Кто-нибудь знает, можем ли мы сказать set +x
в bash без его печати:
set -x
command
set +x
следы
+ command
+ set +x
но он должен просто напечатать
+ command
Bash - версия 4.1.10 (4). Это прослушивает меня в течение некоторого времени - выход загроможден бесполезными линиями set +x
, что делает средство трассировки не таким полезным, как могло бы быть.
У меня была та же проблема, и я смог найти решение, которое не использует подоболочку:
set -x
command
{ set +x; } 2>/dev/null
Вы можете использовать подоболочку. После выхода из подоболочки значение x
будет потеряно:
( set -x ; command )
Я взломал решение для этого совсем недавно, когда я его разозлил:
shopt -s expand_aliases
_xtrace() {
case $1 in
on) set -x ;;
off) set +x ;;
esac
}
alias xtrace='{ _xtrace $(cat); } 2>/dev/null <<<'
Это позволяет вам включать и отключать xtrace, как в следующем, где я регистрирую, как аргументы назначаются переменным:
xtrace on
ARG1=$1
ARG2=$2
xtrace off
И вы получите вывод, который выглядит так:
$ ./script.sh one two
+ ARG1=one
+ ARG2=two