1

我一直在 bash 脚本中使用“set -x”来帮助我调试一些功能,它对我来说效果很好

    -x      After  expanding  each  simple  command,  for command, case command,
            select command, or arithmetic  for  command,  display  the  expanded
            value  of PS4, followed by the command and its expanded arguments or
            associated word list.

但是,我希望能够在离开该功能之前将其清除

例如:

    #/bin bash

    function somefunction() 
    {
        set -x

        # some code I'm debugging

        # clear the set -x
        set ????
    }

    somefunction 
4

3 回答 3

5

引用手册:

使用 + 而不是 - 会导致这些标志被关闭。

所以这set +x就是你要找的。

于 2013-10-01T20:01:30.833 回答
2

考虑一个函数

foo () {
    set -x
    # do something
    set +x
}

问题是,如果在调用之前-x已经设置了该选项,它将被. foofoo

如果要恢复旧值,则必须测试它是否已使用$-.

foo () {
    [[ $- != *x* ]]; x_set=$?    # 1 if already set, 0 otherwise
    set -x
    # do something
    (( x_set )) || set +x       # Turn off -x if it was off before
}
于 2013-10-01T20:38:41.620 回答
0

有关更多信息,请始终参阅基本指南。这清楚地给了你答案:

http://www.tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html

set -x          # activate debugging from here
w
set +x          # stop debugging from here
于 2013-10-01T20:09:34.510 回答