【问题标题】:Run shell script in WSL with \r\n使用 \r\n 在 WSL 中运行 shell 脚本
【发布时间】:2020-06-23 13:41:01
【问题描述】:

我有一个 Python 项目,它是一堆 Docker 容器和 terraform 脚本。我的工作站是 Windows 10,所以我在 WSL 中安装了 Ubuntu 来开发它。我面临的问题是我需要在构建过程中运行很多 shell 脚本 (.sh)。在 Git 中,它总是以 Windows 风格检出文件,并以 Unix 风格检出文件。结果,Ubuntu bash shell 不喜欢这些 shell 脚本,我必须在运行文件之前运行 dos2unix。是否有一种方法可以让我在不修改它们的情况下运行这些脚本?

【问题讨论】:

  • 您能修复您使用的任何 git 客户端以在结帐时保留行尾吗?一种更简单的选择可能是在 WSL 命令行上使用 git(我就是这样做的)。

标签: bash git windows-subsystem-for-linux


【解决方案1】:

如果脚本不调用另一个脚本,你可以

tr "\r\n" "\n" script.sh | bash

但在另一种情况下,我认为您需要更改存储库配置以告诉 git 不要转换扩展名为 .sh 的文件。看这个答案https://stackoverflow.com/a/39461324/5032541

如果您想更改 git 配置以删除自动转换,请查看 official documentation。但这是个坏主意。

【讨论】:

    【解决方案2】:

    imo 的主要问题是将错误的文件结尾签入到 git 中。

    一次修复所有 shell 脚本的简单方法是:

    find . -type f -name "*.sh" -exec dos2unix {} \;
    

    它将递归查找所有扩展名为.sh的文件并对其执行dos2unix。

    【讨论】:

      【解决方案3】:

      我建议将你的 git repo 设置为 checkout linux 样式而不是 windows 行尾。

      我做了很多 node/docker/linux 工作,但有一台 Windows 10 笔记本电脑,这就是我所做的。

      git config --global core.autocrlf input
      

      有关更多详细信息,请参阅this link。这样你就不需要连续运行脚本来确保你有正确的行尾。还有一件好事是将您的编辑器设置为默认为 linux 行尾。

      【讨论】:

        猜你喜欢
        • 2020-07-10
        • 2021-09-26
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 2015-10-13
        相关资源
        最近更新 更多