为什么命令行不遵守OS X上的PATH顺序?


2

我在里面添加了一个ssh命令 ~/bin/ssh 并修改了 PATH 在其他路径之前包括它。

当我跑的时候 which ssh 它会回应 ~/bin/ssh 但是当我跑的时候 ssh 它只会执行 /usr/bin/ssh 代替。

我没有别名 ssh

是什么原因,我该如何解决?

Answers:


4

不使用 which, 使用 type。该 which 默认shell(bash)中的命令是一个外部实用程序,它不知道别名和函数。另一方面, type 是一个内部实用程序,它将告诉您它的参数是别名,函数,内置实用程序还是外部命令。

which 命令在教程和手册中仅作为历史原因提到 - 30年前的 type 命令并不存在,并且有些人适应缓慢。

有关更多详细信息,包括对历史和当前shell的讨论,请参阅 为什么不用“哪个”?那要用什么?

$ type cp
cp is aliased to `cp -i'
$ type mkcd
mkcd is a function
mkcd ()
{
…
}
$ type type
type is a shell builtin
$ type cat
cat is /bin/cat

在zsh中,可以使用 which:zsh都有 typewhich 作为内置命令。

另请注意,如果您刚刚安装或删除了某个程序,那么shell可能已经记住了它的旧位置。例如,如果您只是在一个位于系统目录之前的目录中安装了您自己的程序版本 $PATH,shell可能会继续调用系统附带的程序。这只是在安装或删除时已经运行的shell中的问题。要使用当前数据刷新shell的内存,请运行该命令 hash -r 要么 hash COMMANDNAME


0

神秘解决了,我在bash_profile中有一个带有这个名字的函数......

使用:set | grep ssh找到它


如果你发现你想要一个函数环绕 ssh,你应该使用一个 配置文件 代替。您可以在中定义主机名,用户名和其他选项的快捷方式 ~/.ssh/config
Gilles
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.