在过去的几天里,我将 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 行尾保存。