如何修复Ruby中的Shebang警告

5
当我在我的项目中执行任何rails命令时,都会收到以下警告:
/home/vagrant/.rvm/rubies/ruby-2.5.3/bin/ruby: warning: shebang line ending with \r may cause problems

我尝试安装另一个Ruby版本,但是警告仍然相同。 我正在使用开发者使用的相同Ubuntu版本。


“line ending with \r” - 看起来你的代码使用了Windows行尾符\r\n。请改用Unix行尾符\n - Stefan
@Stefan 我会说这更像是 Macintosh 的遗留问题。尽管在 Win 中\r出现在\n之前,但行的结尾确实是以\n结束的。 - Aleksei Matiushkin
3
警告的措辞不好。Shebang行以\n结尾。如果有Windows换行符,则属于shebang行的最后一个字符,即终止符\n之前的最后一个字符将是\r。至少一些操作系统仍会将其解释为解释器名称的一部分,因此它实际上会搜索名为ruby\r的解释器可执行文件,显然找不到。因此,警告消息将终止符前的最后一个字符视为“行结束符”,而终止符则不是该行的一部分。 - Jörg W Mittag
相应的方法 warn_cr_in_shebang 实际上检查的是 \r\n。我已经打开了一个 PR 来重新编写这个消息。 - Stefan
3个回答

1

我在尝试运行bin/rails db:create时也遇到了同样的问题。我花了几个小时试着找出问题所在,但解决起来很简单。我使用的是Visual Studio Code作为我的编辑器。

我的解决方法为了解决这个问题,我导航到位于bin文件夹下的ruby文件(bin/rails)。在Visual Studio Code编辑器的底部状态栏上,你应该能看到一个按钮CRLF(控制字符)。点击它并将其更改为LF

错误信息的原因这是因为Windows默认使用CRLF控制字符,而现在你正在使用Windows子系统来运行Linux,控制字符应该是LF

希望这对你们有所帮助。


非常有帮助,因为许多答案都试图使用 Git 来解决这个问题。 - Brendon Muir

0

您的文件中有一个 Windows 行尾符 ('\r\n'),而不是 Unix 行尾符 ('\n')。因此,shell 尝试获取第一行,直到第一个 \n 之前,并发现该行以 \r 结尾。

有几种方法可以避免这些问题:

  1. 使用 git 自动处理:git config --global core.autocrlf true(请参阅 https://help.github.com/articles/dealing-with-line-endings/How to change line-ending settings

  2. 使用操作系统级别的工具:dos2unix(使用您的操作系统工具进行安装)

  3. 编辑器 + editorconfig 文件:查看 https://editorconfig.org/#file-format-details 以了解如何设置 end_of_line 配置,并让您的编辑器完成其余部分。


0

对我在Windows上可行的方法如下:

  • 移除git默认的Windows行尾转换:git config --global core.autocrlf false
  • 将所有文件的行尾从crlf转换为lf(我使用了Linux终端):sudo find . -type f -exec dos2unix {} \;
  • 通过git进行规范化:git add --renormalize

你应该没有任何需要提交的内容,可以使用以下命令检查它是否有效:git ls-files --eol


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接