我试图记住如何配置 Cygwin 以使用 Windows EOL 而不是 Unix EOL。多年来我不必这样做,我刚买了一台新笔记本电脑。
注意:请耐心等待我描述这个问题。除了解决所描述的问题之外,我不希望得到指示我使用 bash shell 或 perl 或其他任何东西的响应。我知道这是可能的;我从 Win2k 开始就这样做了。而我现在已经报废的 Vista 机器以这种方式工作了 10 年。如果它没有发出呱呱叫声,我会有书签 :( 我以前雇主的 Win 7 笔记本电脑就是这样工作的。我记得在默认 bash shell 中设置 EOL 的一些步骤;但找不到任何引用该问题附近任何内容的站点如下面所描述的。
重现步骤:使用 EOL 选择任意搜索字符串,grep 将找不到它。例如,如果有 sample.txt 文件:
这是 我的示例文件 有一些随机 文本 在里面。 我可以继续这样做 但它是 多余的
- 打开Windows 命令提示符
- 执行“grep -i is$ sample.txt”
- 不返回任何结果。
现在,执行
- “dos2unix 示例.txt”
- 执行“grep -i is$ sample.txt”
- 按预期返回以下内容
这是 我可以继续这样做 但它是
现在...
每次我想 grep 时都转换所有文件对我来说是不可行的。我想弄清楚我过去做了什么来更改 grep 以查找 Windows EOL而不是将文件转换为 Unix EOL。
我根本不记得在默认 bash shell 中运行的步骤,或者其他什么来实现它。我进行了详尽的搜索,无法找到正确的术语来提出解决方案。我只为在 Windows 上使用 Ubuntu 或使用 bash shell 命令而不是 Windows 命令或其他不相关解决方案的人寻找解决方案。
我确实尝试添加在几个添加站点上规定的解决方案
出口 SHELLOPTS 设置 -o igncr到 Cygwin/home/user/.bash_profile (其中 user 是我的 Win 用户名)并且它不起作用 -即使在 bash shell 中运行命令。
我似乎记得,当我像我一样仅从 Windows 提示符运行 Cygwin 时,您必须在 bash 中打开一些默认 shell 并键入一些内容以使 Cygwin 识别 Windows EOL。我找不到那个解决方案。
我还尝试更改我的 grep 命令以使用 POSIX 和 -E 以及其他规定的解决方案;没有一个工作,我过去从来没有这样做过。我一直使用上面的命令没有问题(在应用修复后)。
最后,我还卸载并重新安装了 Cygwin,但无济于事(当然)。我看到不少站点表明安装中设置了 EOL 字符;但我既没有收到提示,也没有看到任何指示它的标志的屏幕。而且我在过去的任何 Cygwin 安装对话框中都不记得这一点。我正在安装https://www.cygwin.com/install.html上的 64 位 Windows 版本。我使用 64 位 Windows 10 1903。
我为这篇文章的长度道歉;但我想对这个问题、我尝试过的步骤以及我想要什么做到准确和明确。
预先感谢您的回复。
好的。我放弃。我只能推测我使用的是忽略 \r 的旧 Cygwin 发行版。我相信我记得 > 10 年前的类似事情。我以前只是随身携带我的定制发行版,而不是在我作为承包商时每次更换机器时都必须重新安装 glut。
因此,与其更改我的所有脚本以使用 Windows findstr 或 sed 流来删除 \r,我将只运行 dos2unix。
我不想诉诸于此,因为我不拥有这些文件。所以,我必须制作一个副本,执行 dos2unix 并 grep 副本。幸运的是,我不必经常这样做。
对于我所有的 SVN 和 Git 存储库,我在配置中将文件类型设置为 Unix EOL。只有这个特定的 NAS 存储库引起了我的问题。
@Daniel B--感谢您的回复。
如果我确实解决了这个问题(或者可以以某种方式从 Vista 驱动器中收集到它),我将在此处发布解决方案。