Bash

腳本中的內聯調試 (xtrace)

  • January 6, 2016

有沒有辦法在腳本中強制啟用或禁用每個命令行的調試(xtrace)?

在 Windows Shell(“ms-dos”)中是一個“@”,它可以作為命令行前綴,如果啟用了 echo(比如說調試)(echo on),則禁用該行顯示。

考慮 xtrace on (set -x),但我們可以在某些行中省略它的效果,例如用“@”作為前綴。像:

set -x
@echo Listing...
ls
set +x

輸出範例:

Listing...
+ ls
file1
file2

shell腳本中有類似的東西嗎?

我不知道有任何外殼有這樣的操作員。但是,對於大多數 shell(ksh 除外),您可以通過以下方式靜默切換xtrace

{
 case $- in
   (*x*) set +x;;
   (*) set -x
 esac
} 2> /dev/null

因此,您可以將其設為別名:

alias 'xx={
 case $- in
   (*x*) set +x;;
   (*) set -x
 esac
} 2> /dev/null'

並用作:

set -x
echo traced
xx; echo not traced; xx
echo traced
set +x

請注意,使用 bash,您需要shopt -s expand_aliases在非互動式 shell(如腳本)中擴展別名。

引用自:https://unix.stackexchange.com/questions/253381