在我遇到的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"
答案 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脚本并且会对政策违规行为大声喊叫。