我目前正在尝试使用AWS服务器上的任何时候设置cronjobs,但是当我尝试运行脚本/ rails文件时,我收到以下消息:
-bash: script/rails: /usr/bin/ruby^M: bad interpreter: No such file or directory
脚本/ rails文件包含以下内容:
#!/usr/bin/ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
require 'rails/commands'
对于我来说,无论出于什么原因,我都会在第一行附加额外的^ M.另请注意,我正在开发Windows并部署到AWS ubuntu服务器。有谁知道如何解决这个问题?我正尽力提供尽可能多的指导,但这是一个奇怪的问题。注意:我尝试通过ssh在ubuntu机器上创建文件,但是当我执行脚本/ rails时它尝试执行rails本身。 谢谢, 科迪
答案 0 :(得分:0)
可能是一个行结束问题,其中windows表示换行符的方式与linux不同,因此当您上传文件时,它将无法正确解释。如果您在服务器上使用vim或vi打开文件,您应该会在行尾看到^ M(Control-M)字符。
如果您通过ftp上传,可以尝试在binmode中上传该文件,这可能会解决它。否则,您可以使用vi:http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/打开文件并删除服务器上的有问题的字符。希望有所帮助。
答案 1 :(得分:0)
我假设您在Windows计算机上创建了此脚本。 Windows使用\r\n
作为回车符(新行字符),而linux只使用\n
。这意味着当你在windows上编写脚本并将其传输到linux机器上时,额外的\r
个字符有时会显示为^M
。有一些修复,其中一个最简单的方法就是通过sed
运行文件并替换这些字符:
sed -i 's/\r$//' filename
例如:
➜ echo -ne "hello\r\nworld" > example.txt
➜ cat example.txt | od -c
0000000 h e l l o \r \n w o r l d
0000014
➜ sed -i 's/\r$//' example.txt
➜ cat example.txt | od -c
0000000 h e l l o \n w o r l d
其他选项can be found here。