我认为我在尝试升级到 Python 2.7.2 时弄乱了我的 Ubuntu 服务器上的某些东西。每次我输入没有响应的命令时,bash 的默认设置是这样的:
-bash: /usr/bin/python: is a directory
就像我输入目录名称时一样。但每次我输入不执行任何操作的命令时都会发生这种情况。
artur@SERVER:~$ dslkfjdsklfdshjk
-bash: /usr/bin/python: is a directory
我记得在某个时候弄乱了update-alternatives
Python 中的 to 点,也许就是这个?有什么线索可以解释为什么会发生这种情况吗?
与此问题相关的是,当我尝试使用 easy_install 时,它告诉我
-bash: /usr/bin/easy_install: /usr/bin/python: bad interpeter: Permission denied
/etc/fstab/
设置为 exec。我读过这可以解决第二个问题,但事实并非如此。
答案1
当您运行一个命令foo
(foo
其中被您正在运行的任何命令替换)时,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