一周前我刚刚使用 KDE 迁移到 Arch Linux。一切正常,直到我安装ibus-unikey
,ibus-qt
之后,每当我打开时konsole
,都会出现此错误:
bash: #: command not found
我怀疑这#
是一个常用的命令,因为当我输入它时konsole
,没有任何反应。但当我跑步时pacman -Ss #
,会出现很多东西。
我的问题:命令是什么#
以及我应该做什么来修复此错误?
这是我的.bashrc
,.bash_profile
和PATH
$ cat .bashrc
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
$ cat .bash_profile
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc
alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '
$ echo $PATH
/usr/local/texlive/2015/bin/x86_64-linux:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
补充1:正如@terdon建议的那样,我跑了
$ grep -FH '\#' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login ~/.bash_aliases /etc/bash.bashrc /etc/profile /etc/profile.d/* /etc/environment 2>/dev/null
却一无所获。但后来的命令给了我
$ grep -P '(^|\s+)(\.|source) .' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login ~/.bash_aliases /etc/bash.bashrc /etc/profile /etc/profile.d/* /etc/environment 2>/dev/null
/home/thuyenarc/.bash_profile:[[ -f ~/.bashrc ]] && . ~/.bashrc
/etc/bash.bashrc:[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
/etc/profile: test -r "$profile" && . "$profile"
/etc/profile: . /etc/bash.bashrc
/etc/profile.d/locale.sh: . "$XDG_CONFIG_HOME/locale.conf"
/etc/profile.d/locale.sh: . "$HOME/.config/locale.conf"
/etc/profile.d/locale.sh: . /etc/locale.conf
补充2:我尝试重命名该.bashrc
文件,然后打开konsole
,错误消失了。我怀疑错误一定来自.bashrc
.有任何想法吗?
答案1
该错误意味着您在 bash 的初始化文件之一中有转义#
(这意味着)。\#
由于它似乎不在~/.bashrc
or中~/.bash_profile
,因此它必须位于 bash 加载时读取的其他文件之一中。当然,只需搜索所有这些1即可:
grep -FH '\#' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login \
~/.bash_aliases /etc/bash.bashrc /etc/profile \
/etc/profile.d/* /etc/environment 2>/dev/null
这应该表明上面列出的文件之一包含\#
.编辑该文件,将其删除,一切都应该正常。
如果该命令不返回任何输出,则意味着其中一个文件正在获取另一个非标准文件,而该文件就是出现错误的文件。如果是这种情况,请编辑您的问题并添加此命令的输出:
grep -P '(^|\s+)(\.|source) .' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login \
~/.bash_aliases /etc/bash.bashrc /etc/profile \
/etc/profile.d/* /etc/environment 2>/dev/null
这应该打印出采购另一个文件的所有实例,并应该为我们指明正确的方向。
更一般地说,#
不是命令,而是注释。它后面的任何内容都会被 忽略bash
。所以,当你跑步时pacman -Ss #
,你实际上是在pacman -Ss
独自跑步,这就是为什么你会得到这么多结果。
1其中一些文件与此处无关。例如,如果存在~/.profile
则被忽略,并且当您打开新终端时不会被读取,但您也可以搜索所有这些以防万一。~/.bash_profile
/etc/profile
答案2
可能是由于某种原因 BASH shell 选项interactive_comments
被禁用了。您可以通过以下方式复制该行为:
~ $ shopt -u interactive_comments
~ $ #
# command not found
~ $
您可以确定它是打开还是关闭:
$ shopt interactive_comments
如果输出为“on”,则这是不是你的问题的根源。如果它是“关闭”,那么你应该 grep 你的文件(/u/tedron 的答案)来查找它的设置位置。
答案3
我遇到的问题是,在文件#
中的之前.bashrc
似乎有一些不可见的字符,或者字符#
看起来像#
但不是#
。执行时source .bashrc
我得到了错误。当我使用编辑器(我使用 Emacs)将文件内容复制到新文件tmp
并执行时,source tmp
没有错误。于是我把文件替换.bashrc
为tmp
(mv tmp .bashrc
),问题就解决了。
似乎发生的事情是,在我使用的系统上,除了vi
LibreOffice 之外唯一的编辑器,而且我无权在其上安装软件。所以我使用 LibreOffice 来改编该.bashrc
文件。那似乎是在文件中添加了一些特殊字符或者修改了字符#
。
答案4
聚会有点晚了,但对我来说,解决方案是从网上下载示例 bashrc,然后将 bashrc 的包含内容粘贴到下载的文件中,因为我使用了文本编辑程序(Libre Office Writer)更改了格式。