wikipedia《Shebang (Unix)》阅读摘记

原文地址 https://en.wikipedia.org/wiki/Shebang_(Unix)

shebang 来自英文缩写sharp bang, sharp 表示 # , bang 表示 !
如果一个名为 path/to/script 的脚本,在首行包含 #!/bin/sh 这一句话,那么程序加载器就会运行 /bin/sh ,并把脚本名 path/to/script  作为参数,类似与在命令行中运行:

/bin/sh path/to/script

shebang的语法:

#!interpreter [optional-arg]

其中,interpreter 是一个可执行程序的绝对路径名。
    #! 后面可以跟空格。
   可选参数只能一个。

shebang的作用:
  允许把脚本文件当作命令来使用。一个例子:
一个脚本的名字为 some/path/to/foo
其首行为 #!/bin/sh -x
带两个参数来运行这个脚本 some/path/to/foo bar baz
此时,相当与在命令行中输入 /bin/sh -x some/path/to/foo bar baz
运行时,脚本中的每一个命令都会带上这两个参数,并且首行会被当作注释略过。
注意:不是所有的解释器都会略过首行,例如:

#!/bin/cat
Hello world!

shebang移植的时候要注意:
不同版本的linux对于解释器的安装位置可能不同,例如 python, 有些系统会安装在 /usr/bin/python ,而有一些系统会安装在 /usr/local/bin/python ,当从别的电脑拿到脚本的时候,要检查一下,解释器的位置是否不同。对于这种问题,有一个预防方法:

#!/usr/bin/env sh

因为大部分系统都会有 env 程序,当它调用的时候,会在 PATH变量给出的路径中进行查找 sh, 并运行第一个找到的 sh
如果上面的调用含有参数,例如

#!/usr/bin/env python -c

有一些系统会出现错误,它们会把 python -c 作为一个整体参数给 env 去查找,这时候就会找不到,Cygwin系统中就会出现这种情况。

还有一种常见问题,就是在 windows 中编辑的shebang,会在首行末尾出现回车符号。一些系统会因此出现错误信息。

猜你喜欢

转载自www.cnblogs.com/chritran-dlay/p/9172035.html