MAKE_LINTIAN_HAPPY和shell脚本中的单引号有什么作用?

时间:2014-01-04 16:46:34

标签: linux shell sh

在我遇到的sh脚本中,我找到了行

#\
MAKE_LINTIAN_HAPPY '

接近开头。

从标识符的名称,很清楚为什么添加它。但是我的问题是:为什么这个合法的代码以及它做了什么(如果有的话)?


我问的原因是它在这个脚本上呈现GNU's source-highlight无用,因为它会在tick之后将所有文件解释为字符串。如果我知道为什么它是合法的,可能会建议编辑语言定义文件来解决这个问题。

我尝试在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"

1 个答案:

答案 0 :(得分:5)

您正在查看的脚本实际上不是shell(sh,bash,dash等)脚本,而是tclsh脚本。当你启动它时,事实上,/ bin / sh首先启动。它执行的第一个命令是

exec tclsh $0 -- "$@"

意味着它会启动tclsh并将脚本文件传递给tclsh。现在tclsh开始解释脚本。它还有'#'作为行注释的开头,但与sh相反,如果行末尾被转义,则行注释可以扩展到下一行,因此#\

所以MAKE_LINTIAN_HAPPY行不是tclsh的命令,只是被忽略了。 tclsh执行的第一个命令是set PROG_VERSION ...

我不知道林田。这一行可能完全是为了让lintian将文件的内容“误解”为文本,因为否则它会认为它是一个sh脚本并且会对政策违规行为大声喊叫。