6 bash tty carriage-return cmd.exe windows-subsystem-for-linux
我在 Windows 上有一些 Bash 脚本,有时我会将它们从 Notepad++ 复制到 WSL(基于 CMD)终端仿真器 (TTY) 中以执行它们。
当我通过以下命令将其复制并粘贴到 WSL Nano 中时,尾随空格(nano 中的绿色框)会添加到每个脚本中:
nano ~/script.sh
Run Code Online (Sandbox Code Playgroud)
这些尾随空格字符不是脚本的一部分,实际上会破坏它在 Linux 中的执行,因此不应该在脚本中。
WSL TTY 窗口越窄,粘贴时形成的回车就越多。
当我用 Nano 打开脚本时,脚本一直包含这些绿色框,当文件被保存时,它似乎没有去掉这些字符(应该是这样),所以有人可以声称这是 Nano 中的一个错误,但实际上dos2unix
是在文件上执行也不会去除尾随的空格。
我希望在将 Bash 脚本(或任何其他数据)从 Windows 复制和粘贴到 WSL Nano 时,复制时不会形成尾随空格。
https://github.com/Microsoft/BashOnWindows/issues/2006
https://savannah.gnu.org/bugs/?50879
.sh
,因此您将获得 Bash 突出显示。如果您仍然没有它,请尝试通过 SSH 隧道连接到远程 Ubuntu 服务器(如果您有)并在那里以相同的方式创建脚本文件,那么您肯定会有这种行为。正如您所说,问题是由于在带有 Unix 行结尾 (LF) 的狭窄窗口中粘贴文本而引起的。
考虑使用以下AutoHotkey脚本“键入”剪贴板文本,让 Windows 处理换行符。
SendMode Input ; Recommended for superior speed and reliability.
; Upon pressing Ctrl+Alt+v
^!v::
; SendRaw "types" the contents of the variable. When it encounters either
; Cr (`r) or Lf (`n), it sends an "Enter", thus CrLf sends Enter twice.
; Replace any CrLf with Lf (ironic, I know), leaving the clipboard as is
newClip := StrReplace(clipboard,"`r`n","`n")
SendRaw %newClip%
return
Run Code Online (Sandbox Code Playgroud)
小智 3
根据 Nano 开发团队的 Benno Schulenberg 的建议,在 /etc/nanorc 末尾添加以下代码解决了这个问题:
bind ^J enter main
Run Code Online (Sandbox Code Playgroud)
一方面,这将禁用尾随空格的形成,另一方面,将为从 Windows 复制的数据添加换行符(LF 字符),因此它不会出现在长行中。
归档时间: |
|
查看次数: |
839 次 |
最近记录: |