Linux 施特劳斯:一本书
我有一个简单的ruby脚本文件:Linux 施特劳斯:一本书,linux,strace,shebang,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", "./scr
#!/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
命令的任何行。为什么会这样?execve
系统调用是否在内部调用env
命令?我想知道以执行ruby
解释器二进制文件结束的事件序列 shebang行中指定的解释器由内核本身在execve
调用中执行
将您的脚本与简单的
#!/usr/bin/ruby
puts "Hello World"
如果您浏览这个脚本,您将只看到一个execve
调用:以您的脚本名称作为参数的调用,而不是Ruby解释器
有关更多详细信息,请查看load\u脚本