我第一次打开 Mac 终端时收到一条错误消息 -
-bash: Applications: command not found
奇怪的是(或者可能不那么奇怪),当我打开另一个选项卡时,有时会收到不同的错误 -
-bash: README.md: command not found
我今天早上才注意到……我昨晚做了两件事,我觉得这可能导致了这种情况,但我不确定我是否正确,也不知道如何适当地解决这个问题。我的操作系统是 El Capitan 10.11.13。
首先,昨晚我使用 Homebrew 安装了 PostGIS 2.2 - 我的 Postgres 版本是 9.5.1。
其次,我为我的其中一个项目发出了一个 Github 拉取请求(我不确定拉取请求会如何扰乱我的 bash 配置文件,但 Github 的标准 readme 格式是 README.md,所以我认为最好在这里提一下)。
我的 bash 配置文件对我来说看起来很干净 -
[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function
export PATH=${PATH}:/usr/local/mysql/bin
有人能解释一下发生了什么事以及我该如何解决这个问题吗?我对使用终端还不太熟悉,所以我不太清楚如何解释这一点。
答案1
好吧,我确实找到了解决这个问题的方法。
我的 bash_profile 在最后一行下面包含一个星号,当我问这个问题时我忘记加上它了——很抱歉,我甚至没有真正注意到它在那里:
[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function
export PATH=${PATH}:/usr/local/mysql/bin #ADDS MYSQL TO PATH EVERY TIME TERMINAL OPENS
*
正如 Stack Overflow 上的 mklement0 向我解释的那样:
原来原始作者的问题如下:
他们的个人资料中一行上的一个杂散的 * 扩展为当时当前目录中文件和文件夹名称的按字母顺序排序的列表(该过程称为路径名扩展或通配)。
* 作为其自身的命令(或命令的开头)不仅没有用处,还可能导致不必要的命令执行(见下文)。然后,Bash 尝试将此扩展的结果作为要执行的命令执行,并将第一个单词(空格分隔的标记)解释为命令名称。
这失败了,因为第一个单词恰好不是命令名。但是,如果第一个单词恰好是有效的命令名(例如文件),则该命令将执行。(除非当前目录恰好在 $PATH 中,否则第一个匹配的文件名是否是可执行文件并不重要 - 重要的是名称是否与现有命令名匹配)。启动时,用户的主目录是工作目录;相反,稍后打开另一个选项卡将使用当时的工作目录,无论它是什么。
这解释了不同的症状,因为在不同的目录中进行通配符通常会导致不同的名称列表,Bash 将尝试执行其中的相应第一个字。