tre*_*ebi 12 windows bash newline docker
我正在使用VM(在我的情况下只是boot2docker)在Windows主机上运行docker容器.为了方便起见,我的源文件是从主机文件系统映射的,因此默认情况下使用Windows样式的CRLF行结尾而不是Unix样式的LF结尾文本文件.
当我尝试从docker容器运行一些.sh文件时,我会收到错误
bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么方法我怎么能以某种方式告诉bash/sh解释器自动将\ r \n转换为\n并运行文件?
当然,我可以像这样做一些piplelining cat script.sh | tr -d "\r" | sh,甚至为此创建一个别名,但它不会涵盖一个脚本包含另一个脚本的情况.
我到目前为止找到的唯一可接受的解决方案是将Git设置为以UNIX格式签出源文件.
您可以在根文件夹中的repo中提交.gitattributes文件,以便在签出时自动告诉Git将LF行结尾应用于所有.sh文件,即使在Windows上也是如此.这样您或其他开发人员就不必记住在克隆repo的每台计算机上配置Git.
# Set line endings to LF, even on Windows. Otherwise, execution within Docker fails.
# See https://help.github.com/articles/dealing-with-line-endings/
*.sh text eol=lf
Run Code Online (Sandbox Code Playgroud)