为什么我的Ruby脚本不会执行?

时间:2013-09-09 19:08:07

标签: ruby bash shebang env

所以,我制作了一个简单的ruby脚本,

#!/usr/bin/env ruby

puts "Hello!"

当我尝试在终端中运行它时,它不会显示“你好!”屏幕上。我尝试输入chmod +x test.rbtest.rb是我文件的名称)。当我运行它时,它不会给我一个错误,它只是不显示“你好!”。任何帮助都感激不尽。我到处寻找可能的答案,到目前为止我什么都没找到。

2 个答案:

答案 0 :(得分:2)

我猜你正试图像test一样运行它:

$ test

但是test is a bash builtin命令不产生任何输出,它只是设置一个返回值。如果您正确运行脚本:

$ ./test.rb
那时你会看到一些东西。注意明确的./路径,当前目录很少(并且希望永远不会)在PATH中,因此您需要说./来运行当前目录中的某些内容(当然除非您'重新加入/bin/usr/bin等。)


在评论中,您说脚本中有一些 Ctrl + M 字符:

$ cat -e test.rb
#!/usr/bin/env ruby^M^Mputs "Hello!"

我在$输出中看不到任何cat -e,因此您没有任何实际的行尾标记,只有一些回车字符(即{{1} }})。单个CR是旧的MacOS终端,Windows使用CR-LF对,而Unix(包括OSX)仅使用一个LF来标记文本行的结尾。由于您没有任何EOL,因此shell只会看到一行,如下所示:

^M

没有#!/usr/bin/env ruby ... 运行的实际脚本,shell只会看到shebang注释而没有别的。结果是,运行脚本时没有任何明显的结果。修复您的EOL,您的脚本将开始合理地工作。您可能还想查看编辑器的设置,以便开始编写正确的EOL。

答案 1 :(得分:0)

你是怎么称呼这种方法的?如果您在test.rb文件的目录中,您可能希望通过ruby test.rb之类的方式调用它。另一个尝试不起作用的一般提示是在命令行进入irb并尝试你的程序,如puts "Hello!,看看是否是特定代码是问题。