内置shell命令type
如何知道给定命令的路径。 Shell是否具有用于最常用命令的表,其中包含这些命令的路径,或者Shell在系统中搜索这些命令?
答案 0 :(得分:3)
大多数shell会以以下方式尝试查找您输入的程序:
$PATH
环境变量中的目录,以:
分隔使用以下命令显示用于匹配的目录列表:
echo "$PATH" | sed 's/:/\n/g'
大多数shell还会散列已经找到的程序的路径,如果在散列匹配之后移动程序,则可能导致问题。有关更多信息,请参见John1024's answer。
答案 1 :(得分:0)
bash shell保留在路径中已经找到的程序的哈希表。内置type
会检查名称,以查看它是别名,shell保留字,函数,内置文件还是磁盘文件。如果都不是,则检查哈希表:
/* If the user isn't doing "-a", then we might care about
whether the file is present in our hash table. */
if (all == 0 || (dflags & CDESC_FORCE_PATH))
{
if (full_path = phash_search (command))
{
if (dflags & CDESC_TYPE)
puts ("file");
else if (dflags & CDESC_SHORTDESC)
printf (_("%s is hashed (%s)\n"), command, full_path);
else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY))
printf ("%s\n", full_path);
free (full_path);
return (1);
}
}
如果找不到其他名称,它将搜索路径:
/* Now search through $PATH. */
while (1)
您可以使用类似
的方法强制shell忘记哈希表。$ hash -r