一个shebang脚本

时间:2017-01-15 11:27:25

标签: linux strace shebang

我有一个简单的ruby脚本文件:

#!/usr/bin/env ruby

puts "Hello World"

当我使用strace运行时:

$ strace -s 100 -f ./script2

我得到以下成功的execve来电序列:

execve("./script2", ["./script2"], [/* 85 vars */]) = 0
execve("/home/omar/.rvm/rubies/ruby-2.3.1/bin/ruby", ["ruby", "./script2"], [/* 85 vars */]) = 0

这些我希望存在,但输出没有任何执行/usr/bin/env命令的行。为什么会这样? env命令是否在内部由execve系统调用调用?我想知道以ruby解释器二进制文件结尾的事件序列。

1 个答案:

答案 0 :(得分:2)

shebang行中指定的解释器由内核本身在execve调用中执行。

将您的脚本与简单的

进行比较
#!/usr/bin/ruby

puts "Hello World"

如果您使用此脚本,您将只看到一个execve调用:将您的脚本名称作为参数,而不是Ruby解释器。

有关详细信息,请查看load_script kernel function