在bash执行时打印bash脚本注释



假设我有一个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_等。

最新更新