在终端中输入命令总是返回“-bash: /usr/bin/python: 是一个目录”

在终端中输入命令总是返回“-bash: /usr/bin/python: 是一个目录”

我认为我在尝试升级到 Python 2.7.2 时弄乱了我的 Ubuntu 服务器上的某些东西。每次我输入没有响应的命令时,bash 的默认设置是这样的:

-bash: /usr/bin/python: is a directory

就像我输入目录名称时一样。但每次我输入不执行任何操作的命令时都会发生这种情况。

artur@SERVER:~$ dslkfjdsklfdshjk
-bash: /usr/bin/python: is a directory

我记得在某个时候弄乱了update-alternativesPython 中的 to 点,也许就是这个?有什么线索可以解释为什么会发生这种情况吗?

与此问题相关的是,当我尝试使用 easy_install 时,它告诉我

-bash: /usr/bin/easy_install: /usr/bin/python: bad interpeter: Permission denied

/etc/fstab/设置为 exec。我读过这可以解决第二个问题,但事实并非如此。

答案1

当您运行一个命令foofoo其中被您正在运行的任何命令替换)时,shell 会在环境变量的所有目录中搜索具有执行权限的PATH文件。foo

如果找不到,则在具有默认配置的 Ubuntu 系统中,它将运行命令。这是在文件中完成的。/usr/lib/command-not-found foo/etc/bash.bashrc

这就是产生如下输出的结果:

$ foo
No command 'foo' found, did you mean:
 Command 'fio' from package 'fio' (universe)
 Command 'goo' from package 'goo' (universe)
 Command 'fop' from package 'fop' (main)
 Command 'fox' from package 'objcryst-fox' (universe)
 Command 'xoo' from package 'xoo' (universe)
 Command 'zoo' from package 'zoo' (universe)
foo: command not found

和:

$ gnuchess
The program 'gnuchess' is currently not installed.  You can install it by typing:
sudo apt-get install gnuchess

command-not-found程序本身(即/usr/lib/command-not-found)是一个 Python 脚本:

$ file /usr/lib/command-not-found
/usr/lib/command-not-found: a /usr/bin/python script text executable

因此,如果您的 Python 安装损坏,则预计command-not-found会始终失败并给出有关 Python 的错误。您可以通过修复 Python 安装来解决问题。

Ubuntu 已安装 Python,许多程序(例如更新管理器和软件中心)都需要 Python。官方软件源同时提供各种不同版本的 Python,并且可以同时安装不同版本而不会发生冲突。但是,也可以通过从源代码构建 Python 来手动安装它。如果这样做,您需要确保手动编译和安装的 Python 不会与任何其他已安装的 Python 实现发生冲突。

因此,您应该做的第一件事是卸载所有手动安装的 Python。安装时,有一个目录,您应该在其中运行命令sudo make install。您需要转到该目录并运行sudo make uninstall

删除所有手动 Python 安装(如果有)后,完全重新安装 Python:

sudo apt-get update
sudo apt-get --purge --reinstall install python

这可能会起作用。如果不行,请提供以下输出:

which -a python
file /usr/bin/python /usr/bin/python2.7

相关内容