"gcc is hashed (/bin/gcc)"是什么意思?



我已经在debian中预装了一个gcc,我还成功编译了另一个gcc,它安装在/root/tools/中。但之后,我键入了type gcc,它显示为gcc is hashed (/bin/gcc)。这是什么意思?

我的bashPATH变量:PATH=/root/tools/bin:/bin:/usr/bin

hashed表示shell知道它在哪里。当你第一次运行像gcc这样的命令时,shell会在路径中找到它。第二次,shell不去寻找它,因为shell已经记住了它在哪里。这被称为哈希,可能是因为它在内部使用了哈希表。

如果希望shell忘记其记忆的位置,请使用命令rehash。如果你在某个地方安装了一个新程序,但shell找不到它,这很有用,因为它记住了它的旧位置。

编辑后添加:您也可以使用hash -l来查看shell已经散列了什么。

$ hash -l
builtin hash -p /usr/bin/git git
builtin hash -p /home/alester/bin/dirtysmoke dirtysmoke
builtin hash -p /usr/bin/chmod chmod
builtin hash -p /usr/local/bin/exa exa
builtin hash -p /usr/bin/ssh-add ssh-add
builtin hash -p /usr/bin/mkdir mkdir
builtin hash -p /usr/bin/man man

除了Andy的回答之外,还有一些例子。它们展示了bash如何将文件路径添加到其哈希中:

$ hash -l
hash: hash table empty
$ env
$ hash -l
builtin hash -p /usr/bin/env env
$ gcc
$ hash -l
builtin hash -p /usr/bin/gcc gcc
builtin hash -p /usr/bin/env env

第二部分。如果你想看到你的程序的路径,我建议使用"$类型-p":

$ type gcc
gcc is hashed (/usr/bin/gcc)
$ type -p gcc
/usr/bin/gcc

-p密钥描述:

如果使用-p选项,则键入其中一个返回磁盘名称如果名称被指定为命令名称,则将执行的文件,如果"type-t name"不返回文件,则不返回任何内容

有时-p键是不够的-一把钥匙会有帮助:

$ type -p printf
$ type -a printf
printf is a shell builtin
printf is /usr/bin/printf

最新更新