in ubuntu, default umask on ubuntu 022 means newly created files readable everyone, writable owner, nobody can excute it. in case, create new file :
touch test.rb # content is: puts "hello world" ls -l demo.rb # -rw-r--r-- then excute test.rb :
ruby test.rb # output: "hello world" since owner of file not have "x" permission , why can run file ? or have missed knowledge ?
you not executing file binary. executing ruby binary argument test.rb , interprets ruby script. therefore, ruby binary needs execution privilage , not script itself.
you can check privileges of binary running stat (which ruby).
on other hand if place
#!/usr/bin/ruby on top of script , make executable chmod a+x test.rb make linux run it. binfmt module of kernel check search #! (called shebang) in file , run interpreter you.
you can find shebang in lot of shell scripts. nowadays common put #!/usr/bin/env ruby or #!/usr/bin/env python in order use interpreter binary in other location available on path variable /usr/local/bin/ruby. again env binary program. run argument program. kernel pass script parameter result in command /usr/bin/env ruby test.rb.
Comments
Post a Comment