如何修复 ~/.profile 和 ~/.bashrc 语法错误

如何修复 ~/.profile 和 ~/.bashrc 语法错误

Ubuntu 18.04.4(几周前从 18.04.3 自动升级)
/bin/bash

从 Gnome shell 登录后,在屏幕仅呈紫色且在桌面出现之前出现此消息:

Error found when loading /home/hfinger/.profile:  

/home/hfinger/.profile: line 1: #: command not found  
/home/hfinger/.bashrc: line 1: syntax error near unexpected token '('
/home/hfinger/.bashrc: line 1: '# ~/.bashrc: executed by bash(1) for non-login shells.'  

As a result the session will not be configured correctly.  
You should fix the problem as soon as feasible.  

问题是,问题是什么?我搜索过 AskUbuntu,但似乎没有人遇到过这个确切的问题。我不认为这是升级的问题,因为在出​​现此问题之前它已经运行了大约一个月。

我从未碰过这两个文件,因为我很乐意让系统创建和配置它们。此外,我尽量保持 Ubuntu 的原始状态,以避免在升级到新版本后必须恢复设置。以下是每个文件的第一行:

.profile, line 1: # ~/.profile: executed by the command interpreter for login shells.  
.bashrc, line 1: # ~/.bashrc: executed by bash(1) for non-login shells.  

我需要如何修复这些文件?我应该提供哪些其他信息,以便比我更有知识的人可以解决这个愚蠢的问题?

答案1

如果你的文件开头有一个非打印字节序列,就会发生这种情况 - 例如字节顺序标记- 可能是因为在文字处理程序或 Windows 文本编辑器中编辑了它们。

例如,给定

$ file profile bashrc
profile: UTF-8 Unicode (with BOM) text
bashrc:  UTF-8 Unicode (with BOM) text

(其中profile和是我的和bashrc的本地副本,并在开头插入字节序列)然后~/.profile~/.bashrc0xFE 0xFF

$ bash -c 'source profile; source bashrc'
profile: line 1: #: command not found
bashrc: line 1: syntax error near unexpected token `('
bashrc: line 1: `# ~/.bashrc: executed by bash(1) for non-login shells.'

最简单的修复方法是使用dos2unix,默认情况下会删除 BOM:

$ dos2unix profile bashrc
dos2unix: converting file profile to Unix format...
dos2unix: converting file bashrc to Unix format...

$ file profile bashrc
profile: ASCII text
bashrc:  UTF-8 Unicode text

或者您可以简单地用您发现的目录中的最新副本替换文件/etc/skel(尽管显然这样您会丢失所有自定义设置)。


检查非打印字节的其他方法是

cat -A ~/.profile ~/.bashrc

其中 BOM 将显示为控制序列,如M-oM-;M-?#或使用xxdod直接检查字节序列

head -1 ~/.profile | od -tx1

xxd -l16 ~/.profile

diff命令有助于确认有差异,但无法确定差异是什么:

$ diff profile ~/.profile
1c1
< # ~/.profile: executed by the command interpreter for login shells.
---
> # ~/.profile: executed by the command interpreter for login shells.

答案2

检查用户 shell 的简单方法...

如果您尚未Users and Groups安装应用程序,请按以下方式安装...

sudo apt-get update

sudo apt-get install gnome-system-tools

按下Super键并输入“用户”,选择Users and Groups应用程序,单击帐户名称,然后单击高级设置、高级选项卡,并验证正确的 Shell /bin/bash

答案3

Ubuntu 18.04.4(几周前从 18.04.3 自动升级)
/bin/bash

我不知道问题是什么,但这是我修复它的方法:

$ cd ~ 
$ which bash
/bin/bash  
$ mv .profile .profile.bak  
$ mv .bashrc .bashrc.bak  
$ cd /etc/skel/  
$ cp .profile ~/.profile  
$ cp .bashrc ~/.bashrc  

(注意:/bin/bash是 的正确位置bash。)

感谢大家的评论和帮助。

相关内容