用一个 #!评论在Ubuntu中运行的ruby

5 ruby

我是编程新手,我正在尝试使用#!评论ruby.

我一直得到消息:bash:matz.rb:命令未找到

我正在使用这个评论:#!/ usr/bin/env ruby

我曾经尝试过,有没有空间!以及有和没有环境.

当我使用$ ruby​​时

ruby在:/ usr/bin/ruby

我也进入了操作系统并将文件matz.rb的权限更改为rwx,对所有用户都没有影响.我做错了什么或者我的系统设置不正确?

Dou*_*oug 10

/usr/bin/env部分很好.运行时,你需要给bash指向matz.rb的路径.如果您在matz.rb目录中,请键入"./matz.rb".目录"." 表示当前目录 - 运行程序时默认情况下bash不会显示在那里(如Windows).

env程序(/ usr/bin/env)为程序搜索可执行搜索路径(PATH环境变量),ruby就像在命令提示符下键入它一样,然后运行该程序.shebang评论没有这样做.如果你想把你的脚本交给其他可能没有安装ruby的人,那么你应该使用" #!/usr/bin/env ruby"注释,这样只要他们可以通过键入"ruby"来运行ruby,它就会起作用.


Gar*_*eth 9

如果您与matz.rb文件位于同一目录中,请确保将其作为

$ ./matz.rb
Run Code Online (Sandbox Code Playgroud)

而不只是

$ matz.rb
Run Code Online (Sandbox Code Playgroud)

这是一个shell会话,演示了这个工作:

$ ls -la m*
-rwxr-xr-x  1 gareth  gareth  32  8 Jan 08:46 matz.rb
$ cat matz.rb
#!/usr/bin/env ruby
puts "Matz"
$ matz.rb
-bash: matz.rb: command not found
$ ./matz.rb
Matz
Run Code Online (Sandbox Code Playgroud)


Oli*_*ich 0

您是否尝试过如下的 ShaBang 直接指向 ruby​​ ?

#! /usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

然后您从命令行调用脚本

./matz.rb
Run Code Online (Sandbox Code Playgroud)

在Unix/Linux系统下,命令前面的点用于在当前目录中搜索该命令。如果你给出像 /usr/bin/ruby 这样的路径,它将在当前目录中搜索名为 usr... 的目录。

前面没有点/的命令将在环境的路径变量指定的位置中搜索。

以 / 开头的命令将按照指定路径从根目录开始精确搜索。

在 ShaBang 中,您需要指定解释器的确切路径,因此“/usr/bin/ruby”是正确的路径。在命令行上,您希望执行脚本的位置,需要使用“./matz.rb”调用脚本,否则 bash 将搜索类似 /usr/bin/matz.rb 的命令,从而导致错误消息。