1

我有/有~/.bashrc_aliases.sh(一个包含 bash 别名的文件)来自我的~/.bashrc文件。这个~/.bashrc_aliases.sh文件不知何故碰巧是我通过运行修复的 DOS 格式dos2unix在文件上运行来修复它。

当这个别名文件是 'DOS' 格式时,每当我alias在 Bash 中键入命令时,这些alias行都以'字符而不是开头a,并且别名不会真正起作用,所以我得到了类似的东西:

": 没有这样的文件或目录", "'s: 无效选项 -- '"

等等

当文件是 DOS 格式时发生了什么?为什么alias命令返回以字符开头的行'?为什么我收到上述错误?


被 kenorb、tripleee bash 标记为重复

这个问题之前有人问过,并且已经有了答案。如果这些答案不能完全解决您的问题,请编辑此问题以解释它有何不同或提出新问题。

链接到的问题是询问如何解决问题。虽然这个问题要求解释问题期间发生的事情,而不是如何解决它。

4

2 回答 2

3

第一部分比较容易回答。DOS 换行“字符”是一对\r\n(回车,换行)。bash将回车解释为另一个字符,因此将其附加到别名的末尾。例如

alias foo='echo foo'

\r将在别名的正文中附加一个尾随。当由alias命令显示时,该回车会将光标移动到行首,然后打印最终'结果(这将覆盖ain alias)。也就是说,而不是

$ alias
alias foo='echo foo'

你得到了

$ alias
'lias foo'=echo foo

错误可能取决于您定义的别名,但在每种情况下,尾随回车以相同的方式影响错误消息;光标移动到行首并导致消息的结尾覆盖开头。

于 2014-09-02T17:47:41.380 回答
1

终端解释\r为“转到当前行的开头,(并开始覆盖那里的字符)”

大多数终端解释\n为“在同一列中向下一行”,但其中有一个(通常为开启的)配置位termios转换\n\r\n.

(也有 C1 控件IND = '\x84'并且NEL = '\x85'是明确的,但没有人使用它们)

于 2017-08-28T02:54:33.243 回答