我有/ ~/.bashrc_aliases.sh
(包含bash别名的文件)来自我的~/.bashrc
文件。这个~/.bashrc_aliases.sh
文件碰巧是DOS格式,我通过在文件上运行dos2unix
来修复。
当此别名文件采用“DOS”格式时,每当我在Bash中键入alias
命令时,alias
行都以'
字符而不是{{1}开头并且别名不会真正起作用,所以我得到了类似的东西:
“:没有这样的文件或目录”,“s:无效选项 - '”
等
文件处于DOS格式时发生了什么?为什么a
命令返回以alias
字符开头的行?为什么我收到上述错误?
被kenorb标记为重复,tripleee bash
之前已经问过这个问题并且已经有了答案。如果这些答案没有完全解决您的问题,请编辑此问题以解释它的不同之处或提出新问题。
与之相关的问题是如何解决问题。虽然这个问题要求解释问题中发生了什么,而不是如何解决它。
答案 0 :(得分:3)
第一部分更容易回答。 DOS换行符“character”是一对\r\n
(回车,换行)。 bash
将回车符解释为另一个字符,因此它会附加到别名的末尾。例如
alias foo='echo foo'
会在别名的主体后附加一个尾随\r
。当由alias
命令显示时,该回车会在打印最终'
之前将光标移动到行的开头(这将覆盖a
中的alias
) 。也就是说,而不是
$ alias
alias foo='echo foo'
你有
$ alias
'lias foo'=echo foo
错误可能完全取决于您定义的别名,但在每种情况下,尾随回车以相同的方式影响错误消息;光标移动到行的开头,并导致消息的结尾覆盖开头。
答案 1 :(得分:1)
终端将\r
解释为“转到当前行的开头,(并开始覆盖那里的字符)”
大多数终端将\n
解释为“同一列中的一行”,但在termios
中有一个(通常在线)配置位,可将\n
转换为{{1} }}
(C1控件\r\n
和IND = '\x84'
也是明确的,但没有人使用它们。