我正在努力记住如何配置 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 用户名)并且它不起作用--即使在 bshell 中运行命令。
我似乎记得,当像我一样仅从 Windows 提示符运行 Cygwin 时,有一个默认 shell,您必须在 bash 中打开它并输入一些内容才能使 Cygwin 识别 Windows EOL。我找不到那个解决方案。
我也尝试过将 grep 命令改为使用 POSIX 和 -E 以及其他规定的解决方案;但都没有奏效,而且我以前也从未这样做过。我一直使用上述命令,没有任何问题(应用修复后)。
最后,我还卸载并重新安装了 Cygwin,但无济于事(当然)。我看到很多网站都指出 EOL 字符是在安装中设置的;但我既没有收到提示,也没有看到任何显示该字符的屏幕。而且我不记得以前的 Cygwin 安装对话框中有这个。我正在安装 64 位 Windows 版本,位于https://www.cygwin.com/install.html。我用的是64位的Windows 10 1903。
我为这篇文章的篇幅感到抱歉;但我希望准确、清楚地说明这个问题、我尝试过的步骤以及我想要的东西。
提前感谢您的回复。
答案1
好吧。我放弃了。我只能推测我使用的是忽略 \r 的旧版 Cygwin 发行版。我记得 10 多年前就有过类似的事情。我以前只是随身携带定制的发行版,而不是在当承包商时每次更换机器时都重新安装 glut。
因此,我不需要将所有脚本都改为使用 Windows findstr 或 sed 流来删除 \r,我只需运行 dos2unix。
我不想诉诸此举,因为我不拥有这些文件。因此,我必须复制一份,执行 dos2unix 并 grep 副本。幸运的是,我不需要经常这样做。
对于我的所有 SVN 和 Git 存储库,我在配置中将文件类型设置为 Unix EOL。只有这个特定的 NAS 存储库给我带来了问题。
@Daniel B——感谢您的回复。
如果我确实解决了这个问题(或者能以某种方式从 Vista 驱动器中收集到它),我会在这里发布解决方案。