如何让 Windows 上的 git bash 不发出‘\r’?

如何让 Windows 上的 git bash 不发出‘\r’?

问题陈述

我在 Windows 上,有时想在 docker 容器内执行命令,但是无法执行这些命令并出现错误<command>\r: command not found。例如:

$ docker run --interactive ubuntu:22.04
ls
/bin/bash: line 1: $'ls\r': command not found

可能的解决方案?

  • 是否可以在 Windows 版 Git 中配置行尾字符?我找不到它
  • 或者也许解决方案在于删除\r容器 bash 的标准输入中的所有字符,例如类似这样的内容
docker run --interactive ubuntu:22.04 "bash" "-c" "sed 's/\r//g' | bash"

但我无法让它工作。它几乎可以工作,但并不完全,因为直到交互式会话断开连接时才会打印输出。它也似乎过于复杂。

从更广泛的角度来看,我不明白为什么这是一个问题一些容器,但不是全部。

我尝试过的方法

  • 我在 Git for Windows 提供的终端以及 vscode 的集成终端中都遇到了这个问题。

  • 即使我将ls<LF>其粘贴到剪贴板上,仍然会出现相同的错误。

  • 请注意,这个问题与,因为我遇到了同样的问题,但是处于交互模式。

  • 作为一种解决方法,我将其附加#到每一行(有效地做出\r注释),但这很费力并且不灵活。

答案1

\r您可以使用以下命令将 shell 设置为忽略 Windows 行尾(跳过):

set -o igncr

您也可以将其定义SHELLOPTS为 Windows 环境变量并将其设置为igncr。这样,每个 bash 实例都会继承此选项。

答案2

我有一个简单的解决方案来解决您的奇怪问题:(A)您想要的任何命令都应该以“;”终止:空格 分号 空格. (B) 您甚至可能考虑echo DONE在最后使用命令。

$ docker run --interactive ubuntu:22.04
ls ; 
<<ls output here>>
/bin/bash: line 1: $' \r': command not found
$ docker run --interactive ubuntu:22.04
echo EXECUTING ; pwd ; ls ; echo DONE
<<echo output here : EXECUTING>>
<<pwd output here>>
<<ls output here>>
<<echo output here : DONE\r>>

相关内容