学以致用

focus on Python , C++, and some interest in Go and R

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在已经运行的系统中更改了某些以前存在于PATH环境变量所指明的目录中的程序的存放目录后可能出现No such file or directory的错误提示。
比如,以前python存放于/usr/bin/下,现在临时将/usr/bin/python删除,在/usr/local/bin下生成python,按照正常逻辑,此时直接执行python的话,会找到/usr/local/bin/python,因为/usr/local/bin也在环境变量PATH中,但却会出现bash: /usr/bin/python: No such file or directory
为何?
具体原因如下:
bash会保存一个从开机运行以来曾执行过得命令,而不是每次都搜索$PATH,如果在上次执行python命令之后更改了python的实际位置,则bash还会去按照原有hash table里面记录的路径去执行,但因为原执行文件已不存,所以会报出No such file or directory的错误提示。
通过执行 hash 命令可以很容易看出:
root@ubuntu:~$ hash
hits    command
   3    /usr/bin/which
   2    /usr/bin/file
   4    /usr/bin/sudo
   1    /bin/mv
   1    /usr/bin/whereis
   7    /usr/bin/python
root@ubuntu:~$
解决方法:
解决方法也很简单,重置bash 的hash table即可,比如执行 hash -d python即可删除hash table中python的记录,如果再次执行python的时候,bash将搜索$PATH得到新的python路径

posted on 2012-12-27 17:27  Jerry.Kwan  阅读(636)  评论(0编辑  收藏  举报