【问题标题】:How to set up Cygwin to use DOS file endings?如何设置 Cygwin 以使用 DOS 文件结尾?
【发布时间】:2017-02-06 16:08:25
【问题描述】:

我有以下问题:

当我运行一个以 CR+LF 行结尾存储的 shell 脚本时,我收到以下错误:

myscript.sh: line 1: cd: $'somedir\\someotherdir\r': No such file or directory

我已经研究过这个问题,有一个 Cygwin shell 的解决方案,找到here

  1. 创建 .bashrc 文件
  2. 把这个放进去:

    export SHELLOPTS
    set -o igncr
    
  3. 重新加载 Cygwin shell

但是,我使用Cmder,我想在其中应用它。但是我不知道怎么做。正如here 所指出的,Cygwin 曾经有一个选项可以在安装过程中将使用 DOS 文件结尾设置为默认设置,但后来取消了它(不知道为什么)。

最奇怪的是,我在旧电脑上也有相同的设置,也是 Windows 10,一切正常,即使是 CRLF 结尾......

【问题讨论】:

  • 错误的问题。在 cygwin 上使用 LF 结尾,否则某些东西总是会在某些包中分解。
  • 好的,但是你如何解释在旧电脑上一切正常?
  • 你的 cygwin 安装了多久?文本/二进制选项已于 2013 年从设置中移除。
  • 是的,它可能更旧。我手头没有电脑atm。然而,我可能会坚持使用 LF 结尾。只是很好奇为什么它以前可以工作而现在不行(关闭支持的原因是什么)。

标签: windows cygwin line-endings


【解决方案1】:

我从非常旧的 Cygwin 版本升级到最新版本时遇到了同样的问题。 对于极少数有限的“sed”调用,我在输出中显式添加了一个 \r 以保持其他一些下游非 cygwin 工具的使用。

sed s_(complicated-regex-with-capture)_\1\r_g infile > outfile

只有在数据中找到“\r”时,正则表达式专家可能会改进这种方法,以选择性地捕获和发出“\r”。

sed s_(capture1)(capture\r-or-empty:\r*)$_\1\2_g infile > outfile

【讨论】:

    【解决方案2】:

    您也可以使用可以与 Cygwin 一起安装的 dos2unix。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 2014-01-25
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多