我是alias pandoc='~/.cabal/bin/pandoc'
因为我不想$PATH
仅仅为了这个程序而更改我的订单。
一般来说,我在、等中安装的程序/opt/
应该~/.cabal/
位于中的默认值之前/bin/
,但我不希望 bash 搜索十三个特殊目录只是为了找到/bin/cat
,这似乎应该是快速且即时的。
alias
每当某些程序似乎在执行错误的版本时,除了简单地检查它们之外,是否存在更合适的中间立场?
答案1
Bash 维护一个表,用于缓存可执行文件的完整路径 - 例如,http://bradconte.com/bash-path-hashing。第一次/bin/cat
在 Bash 会话中调用时,它的完整路径将存储在此表中。第二运行 时/bin/cat
,Bash 实际上不会再次搜索搜索路径。从某种意义上说,这既快速又直接。
您甚至可以hash
按照以下说明的方式使用(Bash)内置功能这个很好的答案,以便缓存 pandoc 可执行文件的完整路径:
hash -p ~/.cabal/bin/pandoc pandoc
从help hash
:
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME is the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.