解释器是在开头创建的,然后执行以下脚本吗?

时间:2014-10-13 19:32:45

标签: bash shell unix

我有一个关于shell解释器的问题,尽管我已经使用了很多年了。

在shell的开头,我们总是设置环境,然后是shell。以下是两个例子:

文件1:

#!/usr/bin/env bash 
 "bash shells"

文件2:

#!/usr/bin/env jruby 
 "ruby shells"

上述两个样本是否意味着两个脚本的解释器在开始时创建,然后两个解释器都执行以下脚本," Bash shell"和#34; Ruby shell"?

2 个答案:

答案 0 :(得分:1)

来自Wikipedia

  

在类Unix操作系统下,当一个带有 shebang 的脚本作为程序运行时,程序加载程序将脚本的初始行的其余部分解析为解释器指令;而是运行指定的解释器程序,将其作为参数传递给尝试运行脚本时最初使用的路径。例如,如果脚本以路径path/to/script命名,并且它以以下行开头:

#!/bin/sh
     

然后指示程序加载器改为运行程序/bin/sh(通常这是Bourne shell或兼容shell),将path/to/script作为第一个参数传递。

答案 1 :(得分:0)

该行称为shebang行。

这两页有更多您可能会关注的信息。

http://www.in-ulm.de/~mascheck/various/shebang/

http://homepages.cwi.nl/~aeb/std/hashexclam-1.html