Shebang line C.它是如何工作的?

时间:2018-05-04 12:56:40

标签: unix awk shebang

我正在阅读UNIX中的高级编程,并偶然发现了这个例子。什么是shebang线在这里做什么?这是代码的顶部。

#!/usr/bin/awk -f
BEGIN   {
    printf("#include \"apue.h\"\n")
    printf("#include <errno.h>\n")
    printf("\n")
    printf("static void pr_sysconf(char *, int);\n")
    printf("static void pr_pathconf(char *, char *, int);\n")
    printf("\n")
    printf("int\n")
    printf("main(int argc, char *argv[])\n")
    printf("{\n")
    printf("\tif (argc != 2)\n")
    printf("\t\terr_quit(\"usage: a.out <dirname>\");\n\n")
    FS="\t+"
    while (getline <"sysopt.sym" > 0) {
        printf("#ifdef %s\n", $1)
        printf("\tprintf(\"%s is defined (val is %%ld)\\n\", (long)%s+0);\n", $1, $1)
        printf("#else\n")
        printf("\tprintf(\"%s is undefined\\n\");\n", $1)
        printf("#endif\n")
        printf("#ifdef %s\n", $2)

2 个答案:

答案 0 :(得分:3)

shebang理解execve(2)行(在Linux和大多数Unix上)。但是,POSIX没有指定任何内容。你的脚本应该由例如GNU awk,假设脚本是可执行文件(您可能希望可以从PATH variable访问它)。

因此,当某个东西(可能是您的Unix shell,但可能是其他东西)正在使用该/usr/bin/awk脚本执行时,awk程序将被执行。您打赌这个 <script src="/js/lib/jquery-ui.min.js"></script> <script src="/js/lib/bootstrap.min.js"></script> 计划是AWK

的一些实现

答案 1 :(得分:1)

OS执行文件的例程在文件开头查找两个字符List<data> newList = _list .OrderBy(x => x.Attribute, StringComparer.OrdinalIgnoreCase) .ToList(); ,如果存在,而不是直接将文件作为二进制可执行文件加载,它们会调用可执行文件该行的其余部分引用的文件,以及其中的任何命令行参数,然后将原始文件作为最终参数。

这是一个非常复杂的描述;几个例子让它更清晰:

如果#!包含:

myFile

...我们让它可执行:

#!/bin/echo My path is

...然后当我们运行它时,我们得到:

$ chmod +x myFile

或者,如果我们将其内容更改为:

$ ./myFile
My path is /home/slim/myFile

然后当我们运行它时,它会打印出来......

#!/bin/cat
Hello
world

当它调用的命令是一个可以处理内容的解释器时,这通常很有用,并且它本身会忽略shebang。当然,在许多语言中$ ./myFile #!/bin/cat Hello world 表示评论,因此我们免费获得:

#

所以基本上它安排的事项是直接运行#!/bin/bash #!/usr/bin/perl #!/bin/awk -f ,相当于运行myFile