【发布时间】:2016-07-04 02:10:18
【问题描述】:
注释字符# 后面有各种方向,它们以特定方式解释。
- UNIX 社帮:
#!/usr/bin/env ruby - 编码魔法注释(用于 Ruby 1.9):
#coding: UTF-8 - 冻结字符串文字编译指示:
#frozen_string_literal: true - 文本编辑器(如 emacs)的 ruby 模式方向:
#!ruby - vim编码方向:
#vim:set fileencoding=euc-jp
很明显,它们必须放在文件开头附近才能正常工作,但是当它们有多个时,它们不能都放在第一行。它们必须放在文件开头的多少行内?它们之间的相对顺序是否相关?决定它们的规则是什么?
如果有我上面列出的以外的,请补充。
【问题讨论】:
-
在 Vim 模式行的特定情况下,它实际上并不需要位于顶部; Vim 检查文件的前五行和(虽然这个数字可以用
modelines设置)... hashbang 需要在第一个线......我不知道所有其他人......(......这是一个有点广泛的问题......) -
这实际上是四个问题,因为这些行是由不同的程序(shell、ruby、emacs 和 vim)解释的。
-
@Stefan shell 没有查看 hashbang,这是一个链接器和/或内核功能(我不确定它在哪里实现确切,这可能因系统而异,但肯定不是外壳)。
-
@Carpetsmoker 是的,那不准确。
-
Emacs 不需要/想要
#!ruby东西,而是识别#!/usr/bin/ruby行或# -*- ruby -*-(最多可以在第二行,并且只有在第一行是#!, IIRC)。