以不同于 $PATH 的顺序为一个程序设置别名

以不同于 $PATH 的顺序为一个程序设置别名

我是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.

相关内容