Bash
腳本中的內聯調試 (xtrace)
有沒有辦法在腳本中強制啟用或禁用每個命令行的調試(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(如腳本)中擴展別名。