【问题标题】:Linux shell strange situationLinux shell 奇怪的情况
【发布时间】:2010-07-26 17:14:42
【问题描述】:

有人知道为什么下面的脚本有效吗?

#a-random-junk-string
echo HI

shell 执行 echo 命令,并输出 HI。我以为既然没有“!”在“#”之后,shell 会报错。

【问题讨论】:

    标签: linux shell shebang


    【解决方案1】:

    如果没有#!指定特定的解释器,内核不会拦截并使用指定的程序启动它。

    但是,当前的 shell 可能仍将其解释为命令文件,这就是您所看到的。

    【讨论】:

    • 这是正确的。脚本仍然有效的原因是 '#' 是 Bash/SH/ZSH/etc 中的注释字符,因此第一行作为注释被忽略。
    • 感谢您的完整回答!
    【解决方案2】:

    当要求 shell 运行可执行位打开的文件时,它将检查文件并确定它是否以 shebang #!如果是,那么它将执行该命令,该命令将从文件的其余部分获取它的程序文本。

    如果文件不是以 shebang 开头,那么 shell 将尝试自己执行它。这就是您正在发生的事情,shell 将第一行解释为注释。

    【讨论】:

    • 其实是加载器做的,不是shell。请参阅in-ulm.de/~mascheck/various/shebang/sys1.c.html 了解 Dennis Ritchie 在此功能添加到 Unix 时的公告。它很好地解释了为什么由 loader 执行此操作比由 shell 执行此操作更好。
    • @丹。谢谢,这很有趣。
    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多