Bash: #: 未找到命令

Bash: #: 未找到命令

一周前我刚刚使用 KDE 迁移到 Arch Linux。一切正常,直到我安装ibus-unikeyibus-qt之后,每当我打开时konsole,都会出现此错误:

bash: #: command not found

我怀疑这#是一个常用的命令,因为当我输入它时konsole,没有任何反应。但当我跑步时pacman -Ss #,会出现很多东西。

我的问题:命令是什么#以及我应该做什么来修复此错误?

这是我的.bashrc.bash_profilePATH

$ 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 的初始化文件之一中有转义#(这意味着)。\#由于它似乎不在~/.bashrcor中~/.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没有错误。于是我把文件替换.bashrctmpmv tmp .bashrc),问题就解决了。

似乎发生的事情是,在我使用的系统上,除了viLibreOffice 之外唯一的编辑器,而且我无权在其上安装软件。所以我使用 LibreOffice 来改编该.bashrc文件。那似乎是在文件中添加了一些特殊字符或者修改了字符#

答案4

聚会有点晚了,但对我来说,解决方案是从网上下载示例 bashrc,然后将 bashrc 的包含内容粘贴到下载的文件中,因为我使用了文本编辑程序(Libre Office Writer)更改了格式。

相关内容