Alias, um programa em uma ordem diferente de $ PATH

1

Eu alias pandoc='~/.cabal/bin/pandoc' porque não quero alterar minha ordem $PATH apenas para este programa.

Em geral, os programas que instalei em /opt/ , ~/.cabal/ e assim por diante devem preceder os padrões em /bin/ , mas não quero que o bash pesquise treze diretórios especiais apenas para encontrar /bin/cat , que parece que deveria ser rápido e imediato.

Existe um middle-ground mais apropriado do que simplesmente alias sobre programas específicos sempre que eles parecem estar executando a versão errada?

    
por isomorphismes 23.02.2015 / 21:02

1 resposta

2

O Bash mantém uma tabela em que armazena em cache o caminho completo dos executáveis - veja, por exemplo, o link . Na primeira vez que você invocar /bin/cat em uma sessão de Bash, o caminho completo para ele será armazenado nessa tabela. O tempo segundo em que você executa /bin/cat , Bash na verdade não pesquisa o caminho de pesquisa novamente. De certa forma, isso é rápido e imediato.

Você pode até mesmo usar o hash (Bash) embutido da maneira como é explicado em essa resposta legal , para armazenar em cache o caminho completo para o executável pandoc:

hash -p ~/.cabal/bin/pandoc pandoc

De 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.
    
por 24.02.2015 / 09:18