检查当前 bash 详细程度
Check current bash verbosity
我知道可以使用 set -v
将 bash 设置为详细模式,但是我想编写一个即使从冗长的脚本。
虽然我知道我可以通过在函数开头使用 set +v
并以 set -v
结束它来禁用冗长,这意味着我的函数将设置任何调用它的脚本冗长,即使在调用它之前并不冗长。
理想情况下,我会在函数开始时检查详细级别,禁用详细级别,并在函数结束时恢复详细级别更改。
有没有办法找到当前的冗长级别?
if [[ $- =~ v ]]; then
echo "verbose enabled"
else
echo "verbose disabled"
fi
$-
: Contains the current set of enabled options. See: help set
检查详细模式选项与检查任何其他 bash 选项相同,请参阅 In bash, how to get the current status of set -x?。
试试这个:
func() {
local old_verbosity_level=${-//[^v]}
set +v
...
if [ -n "$old_verbosity_level" ]; then set -v; else set +v; fi
}
或更棘手:
func() {
local old_verbosity_level=${-//[^v]}
set +v
...
${old_verbosity_level:+set -v}
}
根据您的功能及其用途,您可以使用 (..)
子 shell 限制选项更改的范围:
foo() (
set +vx
echo "not verbose"
)
set -v
foo
echo "still verbose"
if test -o verbose; then
echo 'shell is running in verbose mode'
else
echo 'shell is not running in verbose mode'
fi
或者,等价地,
if [[ -o verbose ]]; then
echo 'shell is running in verbose mode'
else
echo 'shell is not running in verbose mode'
fi
bash
中的内置 test
实用程序能够使用 -o OPTION
测试是否设置了 shell 选项。请参阅交互式 bash
shell 中的 help test
,或阅读 bash
手册。
你的函数可能看起来像
foo () {
if [[ -o verbose ]]; then
set +v
trap 'set -v' RETURN
fi
# do stuff
}
这个检测函数调用时-v
是否激活。如果是,它将被关闭并安装一个 RETURN
陷阱,当函数 returns 时(在函数末尾,或通过显式 return
声明)。
我知道可以使用 set -v
将 bash 设置为详细模式,但是我想编写一个即使从冗长的脚本。
虽然我知道我可以通过在函数开头使用 set +v
并以 set -v
结束它来禁用冗长,这意味着我的函数将设置任何调用它的脚本冗长,即使在调用它之前并不冗长。
理想情况下,我会在函数开始时检查详细级别,禁用详细级别,并在函数结束时恢复详细级别更改。
有没有办法找到当前的冗长级别?
if [[ $- =~ v ]]; then
echo "verbose enabled"
else
echo "verbose disabled"
fi
$-
: Contains the current set of enabled options. See:help set
检查详细模式选项与检查任何其他 bash 选项相同,请参阅 In bash, how to get the current status of set -x?。
试试这个:
func() {
local old_verbosity_level=${-//[^v]}
set +v
...
if [ -n "$old_verbosity_level" ]; then set -v; else set +v; fi
}
或更棘手:
func() {
local old_verbosity_level=${-//[^v]}
set +v
...
${old_verbosity_level:+set -v}
}
根据您的功能及其用途,您可以使用 (..)
子 shell 限制选项更改的范围:
foo() (
set +vx
echo "not verbose"
)
set -v
foo
echo "still verbose"
if test -o verbose; then
echo 'shell is running in verbose mode'
else
echo 'shell is not running in verbose mode'
fi
或者,等价地,
if [[ -o verbose ]]; then
echo 'shell is running in verbose mode'
else
echo 'shell is not running in verbose mode'
fi
bash
中的内置 test
实用程序能够使用 -o OPTION
测试是否设置了 shell 选项。请参阅交互式 bash
shell 中的 help test
,或阅读 bash
手册。
你的函数可能看起来像
foo () {
if [[ -o verbose ]]; then
set +v
trap 'set -v' RETURN
fi
# do stuff
}
这个检测函数调用时-v
是否激活。如果是,它将被关闭并安装一个 RETURN
陷阱,当函数 returns 时(在函数末尾,或通过显式 return
声明)。