在 Windows 上开发但在 UNIX docker 容器上运行时出现行结尾问题

Loc*_*ock 7 unix bash line-endings docker

我的团队正在构建我们的第一个基于 docker 的 .NET 应用程序,并编写了一个 bash 脚本,该脚本作为构建过程的一部分运行(来自 dockerfile)。我们都使用 Windows 10 机器。

当 bash 脚本运行时,它会抛出错误: /bin/bash^M: bad interpreter: No such file or directory

根据我的研究,这似乎是因为行结尾是 Windows 行结尾,而不是基于 UNIX。我能够通过使用 Notepad++ 转换结尾来解决此问题,并且脚本运行良好。然而,当我进入 SourceTree 查看更改的文件时,它短暂地显示为更改的文件(有人说它无法检测更改)。一旦我单击阶段文件按钮,它就消失了,就好像没有任何更改的文件一样。

我该如何解决这个问题?我可以在 GIT 中看到行结尾设置,但不确定正确的设置应该是什么。

小智 7

您可能正在寻找该.gitattributes文件。

它允许您设置要在哪些文件中使用哪些行结尾。

在这里阅读更多内容:文档


Ric*_*o D 6

使用dos2unix将帮助您解决这个问题。dos2unix 的作用是删除您遇到的隐藏 Windows 字符 (^M)。

基于 Windows 的文本编辑器在行尾放置特殊字符来表示换行符或换行符。通常无害,Linux 服务器上的某些应用程序无法理解这些字符,并可能导致服务无法正确响应。

如果您的 Linux 机器上还没有 dos2unix:

安装 dos2unix

apt install dos2unix
Run Code Online (Sandbox Code Playgroud)

对有问题的文件运行 dos2unix

dos2unix your_problematic_file.txt
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我的问题并不是真正转换行结尾。我知道该怎么做。我的问题是我们在 Windows 机器上开发,所以我转换了结尾,但 GIT 不会识别已更改的文件,以便我签入它以供其他开发人员拾取它。 (2认同)