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

 手机用户2502876103 发布于 2023-02-06 15:56

sh我遇到的脚本中,我发现了这些线条

#\
MAKE_LINTIAN_HAPPY '

接近开始.

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


我问的原因是它使得GNU的源代码突出显示在这个脚本上无用,因为它会将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"

Harald.. 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脚本,并会对政策违规大声喊叫.

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

    exec tclsh $0 -- "$@"
    

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

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

    我不知道林田.这一行可能正是让lintian"误解"文件内容只是文本的目的,因为否则它会认为它是一个sh脚本,并会对政策违规大声喊叫.

    2023-02-06 15:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有