我想在我的KornShell(ksh)脚本中使用详细/非详细模式。
详细说明,我需要用
执行语句echo blah blah blah
但是在非冗长的情况下,我不想排除那些echo语句 现在我猜测有一种更好/更优雅的方式来实现这一点,而不是使用全局的冗长状态并做一个
if [[ $verbose eq 1 ]] ; then
echo blah blah blah
fi
我是ksh的新手,并不知道所有的技巧。 有人会建议可以做些什么吗?
答案 0 :(得分:3)
这应该只适用于ksh
,bash
或任何POSIX
或bourne shell派生词:
$ debug=true
$ $debug && echo blah blah blah
blah blah blah
$ debug=false
$ $debug && echo blah blah blah
$
答案 1 :(得分:1)
哎呀,你说“ksh”,但概念很相似......
您可以这样做:
export DEBUG=1
[ $DEBUG -eq 1 ] && echo hi
hi
export DEBUG=0
[ $DEBUG -eq 1 ] && echo hi
或者您可以使用“-xv”标志执行脚本,方法是在开始时更改shebang行
#!/bin/bash -xv
Line 1 of your script...
Line 2 of your script
或执行如下脚本:
bash -xv yourscript
或者,您可以在登录/配置文件脚本中定义debug()函数并在那里进行检查。
答案 2 :(得分:0)
没有进一步的ado(在ksh和bash中有效,而不是POSIX sh):
# function verbose()
# accepts on | off | an empty string | a message
# on|off changes the global variable _Verbose
# Anything else will return the value of ${_Verbose}
# and (optionally) display a message (which cannot start with on or off)
#
# Use only as conditional for echo: verbose && echo ...
_Verbose=0
verbose() {
case ${1} in
(on) _Verbose=1;;
(off) _Verbose=0;;
("") ((_Verbose));;
(*) ((_Verbose)) && echo "$*"
esac
}
$ verbose on
$ verbose && echo "Here's a message"
Here's a message
$ verbose "And another one"
And another one
$
$ verbose off
$ verbose && echo "Here's a message"
$ verbose "And another one"