script - bash معنى



مجموعة Bash+x بدون طباعتها (3)

هل يعرف أي شخص ما إذا كان بإمكاننا set +x في bash دون طباعته:

set -x
command
set +x

آثار

+ command
+ set +x

ولكن يجب أن تطبع فقط

+ command

باش هو الإصدار 4.1.10 (4). هذا هو التنصت لي لبعض الوقت الآن - الإخراج هو مزدحم مع set +x غير مجدية set +x سلالة ، مما يجعل منشأة التتبع ليست مفيدة كما يمكن أن يكون.


Answer #1

اخترقت حلًا لهذا في الآونة الأخيرة عندما شعرت بالانزعاج من ذلك:

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

Answer #2

ماذا عن حل يعتمد على نسخة مبسطة من @ user108471:

shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ set +x; } 2>/dev/null'

trace_on
...stuff...
trace_off

Answer #3

يمكنك استخدام subshell. عند الخروج من القائمة الفرعية ، سيتم فقد الإعداد إلى x :

( set -x ; command )




shell