假设我有一个bash脚本test.sh
:
#!/bin/bash
# Comment 1
echo "Hello world"
# Comment 2
echo "Hi there"
我知道在使bash脚本可执行并运行它之后,只有echo
命令会显示为输出。
我想知道是否有一种方法可以在执行时打印注释。也就是说,我希望输出看起来像:
Comment 1
Hello world
Comment 2
Hi there
是否有办法在执行时打印注释
不,不可能。
的
修改bash源代码,修改语言解析器,将#
字符解析为; echo
字符。
在不需要真正的解析器的非常简单的情况下,您可以将源文件中的所有#
替换为echo
,然后运行它。如sed 's/#/echo/' test.sh | bash -s
.
就像user1934428
说的那样
不完全是你想要的,但如果你将shebang设置为#!/bin/sh -x
(或-v
),它将打印出注释和脚本中的命令
附加参考:https://stackoverflow.com/a/2853811/10359765
一种常见的安排是设置不同的日志级别,然后根据日志级别发出不同数量的日志。
debug () { ${debug-:} "$0: $@" >&2; }
info () { ${info-:} "$0: $@" >&2; }
warn () { ${warn-:} "$0: $@" >&2; }
error () { ${error-:} "$0: $@" >&2; }
case $1 in
--debug) debug=echo; info=echo; warn=echo; error=1;;
--info) info=echo; warn=echo; error=1;;
--warn) warn=echo; error=echo;;
--error) error=echo;;
-*) echo "$0: unknown option '$1' -- aborting" >&2
exit 127;;
esac
shift
debug here we go
info starting
echo "Hello world"
warn the end is nigh
echo "Hi there"
error we die here
这只是一个非常简单的演示;如果没有显式指定级别,您可能希望它更安全,更通用,并且具有合理的默认值,例如使用--warn
(这意味着--error
)运行。
"comments"不再是注释,并且在此实现中输出为标准错误;但正如你所看到的,这也允许你输入"注释"它们在调试时非常有用,而不仅仅是在阅读代码时。
你可以让命令(debug
,warn
等)看起来更像注释通过重命名它们,也许是_dbg_
,_warn_
等。