首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >`散列-p`是否更改外部命令名的路径名?

`散列-p`是否更改外部命令名的路径名?
EN

Unix & Linux用户
提问于 2018-05-24 21:14:03
回答 2查看 162关注 0票数 2

在我的~.profile

代码语言:javascript
复制
PATH="/path/1/":"/path/2/":"$PATH"

/path/1//path/2/都有同名为myexecutable的可执行文件。

在非登录交互shell中,我想在两个目录之间临时交换搜索顺序。

hash使用Bash手册

-p选项禁止路径搜索,文件名用作名称的位置。

我的方式是

代码语言:javascript
复制
$ hash -p /path/2/myexecutable
hits    command
   3    /usr/bin/which
   4    /usr/bin/psql
   1    /bin/cat
  10    /usr/bin/sudo
   1    /bin/mv
   1    /usr/bin/whereis
   3    /bin/mkdir
  19    /bin/ls

输出与hash相同,它似乎没有将myexecutable更改为/path/2/myexecutable

代码语言:javascript
复制
$ which myexecutable
/path/1/myexecutable

那么hash -p实际上是做什么的呢?

谢谢。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-05-24 22:21:43

来自help hash

散列:散列-p路径名使用pathname作为名称的完整路径名

所以:

代码语言:javascript
复制
$ hash -p   /path/2/myexecutable   myexecutable

做你想做的事。

当然,您可以使用可执行名称玩一些游戏:

代码语言:javascript
复制
$ hash -p   /bin/echo  myexecutable

无论何时调用echo,都会运行myexecutable

代码语言:javascript
复制
$ myexecutable Hello World
Hello World
票数 3
EN

Unix & Linux用户

发布于 2018-05-25 05:52:49

代码语言:javascript
复制
$ touch file
$ ls
file
$ hash
hits    command
   1    /usr/bin/touch
   1    /bin/ls
$ hash -p /hello/world/ls ls
$ ls
bash: /hello/world/ls: No such file or directory

hash -p somepath somecommandsomecommand的散列路径设置为bash中的给定路径somepath

这通常无助于扭转两个目录之间的PATH搜索顺序,因为您必须在两个目录中发生的所有二进制文件上使用hash -p。如果您只有一个这样的二进制,它可能是一个可行的选择。一个更可移植的解决方案是简单地在PATH值前面加上第二个目录。

如果您的原始PATH

代码语言:javascript
复制
/path/1:/path/2:...

你先把它变成

代码语言:javascript
复制
/path/2:/path/1:/path/2:...

然后使用hash -r重置散列路径,并像往常一样使用二进制文件。这些信息现在将从/path/2而不是/path/1中获取。

如果将原始PATH保存在临时变量中,则很容易恢复。

摘要:

代码语言:javascript
复制
oldpath=$PATH
PATH=/path/2:$PATH
hash -r

# do stuff

PATH=$oldpath
hash -r
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/445865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档