在我遇到的sh脚本中,我找到了行
#\
MAKE_LINTIAN_HAPPY '接近开始。
从标识符的名称来看,很清楚为什么要添加它。但是,,我的问题是:为什么这是合法的sh代码,它做什么(如果有的话)?。
我之所以问这个问题,是因为它使GNU源-突出显示在这个脚本上毫无用处,因为它将在勾选后的所有文件解释为字符串。如果我知道为什么这是合法的,也许可以建议对语言定义文件进行编辑来解决这个问题。
我试图在man页面中寻找sh的线索
$ man sh|grep "\W'\W"但是这些比赛似乎都没有帮助(虽然有很多比赛,所以如果有比赛的话,我可能会错过)。
我也不理解#\;我不知道这是否与这个问题无关。(Vim将把#\后面的行作为注释进行语法化,但是一个简单的测试表明sh确实执行了#\后面的行。)
下面是脚本开头的一个扩展节选:
#!/bin/sh
# [...]
#\
exec tclsh $0 -- "$@"
#\
MAKE_LINTIAN_HAPPY '
set PROG_VERSION "v1.27 17/06/2005"发布于 2014-01-04 19:13:21
实际上,您正在查看的脚本不是shell (sh、bash、dash等)脚本,而是tclsh脚本。启动它时,实际上,首先启动/bin/sh。它执行的第一个命令是
exec tclsh $0 -- "$@"这意味着它启动tclsh并将脚本文件传递给tclsh。现在tclsh开始解释脚本。它也有“#”作为行注释的开头,但是与sh不同的是,如果行尾转义,行注释可以扩展到下一行,因此是#\。
因此,MAKE_LINTIAN_HAPPY行不是tclsh的命令,它只是被忽略了。tclsh执行的第一个命令是set PROG_VERSION ...。
我不认识林田。这一行可能正是为了让lintian将文件的内容“曲解”为文本,因为否则它会认为它是sh脚本,并且会大声叫喊违反策略的行为。
https://stackoverflow.com/questions/20923740
复制相似问题