LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 909|回复: 3

一个和shell环境变量PATH相关的问题

[复制链接]
发表于 2008-5-20 19:02:07 | 显示全部楼层 |阅读模式
比如我有一个脚本叫做myscript
1 我将这个脚本放到path1目录下,然后执行export PATH=path1PATH
2 我拷贝这个脚本到path2目录下,然后执行export PATH=path2PATH
现在which myscript将显示path2/myscript,我执行myscript的话也是执行的path2下面的那个。

3 由于某种原因,我删除了patc2下面的myscript脚本,这时候如果which myscript将显示path1/myscript,而如果执行myscript的话,却显示path2/myscript不存在的错误

shell中有什么命令可以在不重新登陆shell的情况下,能够让shell正确的执行path1/myscript而不提示出错吗?

PS:这个问题没什么实际的价值,只是一时好奇,不知道有没有人知道答案,帮忙告诉一下,谢谢。
发表于 2008-5-20 20:10:29 | 显示全部楼层
印象中 sh 会缓存命令的执行路径, 一般来讲, 可以通过 export PATH=$PATH 来强制清空缓存.

对于 bash, 似乎可以用 hash -r 来完成同样的工作
回复 支持 反对

使用道具 举报

发表于 2008-5-21 00:18:49 | 显示全部楼层
只有在散列表中没有找到此命令,才对 PATH 进行完整的搜索。如果搜索不成 功
       ,shell 输出错误消息,返回退出状态 127
详见man bash 之 命令执行(COMMAND EXECUTION)

清空散列表即可解决这个问题
(LFS里经常需要这么用)
bash: hash -r
( csh: rehash ? )
回复 支持 反对

使用道具 举报

发表于 2008-5-21 00:26:28 | 显示全部楼层
哦,学习了...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表