合并主目录破坏了 Readline/.bashrc

合并主目录破坏了 Readline/.bashrc

在过去的几天里,我将 12.04 工作安装中的主目录合并到旧主目录,我相信是 10.04 安装中的主目录(它是一个裸驱动器)

我已正确加载和安装新驱动器,但是当我尝试使用 12.04 安装中的 .bashrc 条目时,出现类似以下别名的情况:

alias banana='echo banana'

它会产生以下错误:

-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: .bashrc: line 36: syntax error near unexpected token `$'in\r''
'bash: .bashrc: line 36: `case "$TERM" in

我找不到该 .bashrc 文件中引用的文本(只有当我从 /etc/skel 复制它时它才有效,即使在添加别名和来源,然后删除别名和来源后,它仍然会产生错误。让 Bash 再次工作的唯一方法是从 /etc/skel 重新复制文件

看来我不能对 .bashrc 进行任何修改,否则会导致这些错误。我怀疑这与 readline 或 .inputrc 有关,它们也存在问题(尽管这些问题现在似乎已经解决了)。截至目前,/home/user 目录中没有 .inputrc。

谢谢你提供的所有帮助!

答案1

尝试这个:

sed -i -e 's/\r$//' ~/.bashrc

这将删除 Windows 样式的行尾(CR 字符 - \r)。现在,您source ~/.bashrc不会收到任何错误。

接下来,在从其他文件复制任何内容之前,请对该文件运行相同的命令:

sed -i -e 's/\r$//' /path/to/file_from_where_you_copy

答案2

错误:

$'\r': 找不到命令

意味着你的文件(.bashrc)以某种方式包含 Windows行尾(CRLF) 并且 bash 无法识别它们,因此失败。也许您在 Windows 中编辑了该文件?

因此,您必须将受影响的文件转换回使用 Unix 样式的行尾,从 CRLF 转换为 LF。

这可以通过以下方式实现:dos2unix命令,例如

dos2unix ~/.bashrc

如果您没有,请通过 安装apt-get install tofrodos

否则,如果你已经安装了 Vim,请尝试:

ex +'%!tr -d "\r"' -scwq ~/.bashrc

对于多个文件:

ex +'bufdo!%!tr -d \r' -scxa ~/.bash*

注意:该:bufdo命令不是POSIX


如果你恰巧在使用 Vagrantfile,并且这是配置脚本的一部分,你可以设置binary对于true你的 shell,例如

# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
  s.binary = true # Replace Windows line endings with Unix line endings.
  s.path = "script.sh"
end

答案3

该文件看起来相当混乱。您可能只想删除该文件并复制一个新文件 /etc/skel

rm ~/.bashrc
cp /etc/skel/.bashrc ~/.bashrc

然后编辑文件并确保使用 UNIX 行尾保存。

相关内容