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

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

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

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

我猜你正试图像以下那样test它:

 $ test 

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

 $ ./test.rb 

然后你会看到一些东西。 注意显式的./路径,当前目录很少(并且希望永远不会)在你的PATH所以你需要说./在当前目录中运行一些东西(除非你当然在/bin/usr/bin ,等等。)。


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

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

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

 #!/usr/bin/env ruby ... 

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

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