Bash 如果输入到终端而不是复制和粘贴,命令会产生不同的结果
Bash command producing different results if typed in to terminal instead of copy and pasted
linux 的新手,通过 VirtualBox 在虚拟机 运行 Ubuntu 上练习 bash。
有一个命令来打印文本文件中每一行的第一个字符,从而产生正确的输出:
cut -f 1- -d "^M" sample.txt | cut -c 1
但是,当我从终端复制命令并使用 Ctrl+Shift+c 和 Crtl+Shift+v 粘贴回终端然后执行时,出现以下错误:
cut: the delimiter must be a single character
编辑:我通过按住 Ctrl+v 并按回车键来键入“^M”Return
编辑:没有意识到 Cut 命令无论如何都在每一行上运行,所以给出的示例中命令的第一部分是无用的,即使如此问题仍然有效。
您可以尝试使用 dos2unix
命令,而不是使用 Windows 脚本替换 Windows 文件中的 ^M
,这正是该命令的作用。
我在 Linux 中知道的唯一情况是 ^M
在屏幕上键入 ctrlv接着回车是在文本编辑器里面vim或者gvim .
在那种情况下,您在文件中输入的文本实际上是一个回车 return,但在屏幕上,您看到的是两个字符 ^M
。由于所见即所得并非所见即所得,因此复制和粘贴会导致不可预测的结果。
在Linux中,行之间不用回车returns分隔(十六进制代码0d
或ctrl m),但通过换行(十六进制代码0a
或ctrlj).
linux 的新手,通过 VirtualBox 在虚拟机 运行 Ubuntu 上练习 bash。 有一个命令来打印文本文件中每一行的第一个字符,从而产生正确的输出:
cut -f 1- -d "^M" sample.txt | cut -c 1
但是,当我从终端复制命令并使用 Ctrl+Shift+c 和 Crtl+Shift+v 粘贴回终端然后执行时,出现以下错误:
cut: the delimiter must be a single character
编辑:我通过按住 Ctrl+v 并按回车键来键入“^M”Return
编辑:没有意识到 Cut 命令无论如何都在每一行上运行,所以给出的示例中命令的第一部分是无用的,即使如此问题仍然有效。
您可以尝试使用 dos2unix
命令,而不是使用 Windows 脚本替换 Windows 文件中的 ^M
,这正是该命令的作用。
我在 Linux 中知道的唯一情况是 ^M
在屏幕上键入 ctrlv接着回车是在文本编辑器里面vim或者gvim .
在那种情况下,您在文件中输入的文本实际上是一个回车 return,但在屏幕上,您看到的是两个字符 ^M
。由于所见即所得并非所见即所得,因此复制和粘贴会导致不可预测的结果。
在Linux中,行之间不用回车returns分隔(十六进制代码0d
或ctrl m),但通过换行(十六进制代码0a
或ctrlj).