1

Я alias pandoc='~/.cabal/bin/pandoc' потому что я не хочу менять свой порядок $PATH только для этой одной программы.

В общем, программы, которые я установил в /opt/ , ~/.cabal/ и т.д., Должны предшествовать значениям по умолчанию в /bin/ , но я не хочу, чтобы bash просматривал тринадцать специальных каталогов, просто чтобы найти /bin/cat , который кажется, это должно быть быстро и немедленно.

Есть ли более подходящее промежуточное положение, чем просто alias на определенные программы, когда кажется, что они выполняют неправильную версию?

1 ответ1

2

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .