【问题标题】:strace a shebang scriptstrace 一个 shebang 脚本
【发布时间】:2017-01-15 11:27:25
【问题描述】:

我有一个简单的 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 解释器二进制文件结尾的事件序列。

【问题讨论】:

    标签: linux strace shebang


    【解决方案1】:

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

    将您的脚本与一个简单的脚本进行比较

    #!/usr/bin/ruby
    
    puts "Hello World"
    

    如果您对该脚本进行 strace,您将只看到一个 execve 调用:以您的脚本名称作为参数的调用,而不是 Ruby 解释器。

    查看load_scriptkernel function了解更多详情。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2011-11-26
      • 1970-01-01
      相关资源
      最近更新 更多