Быстрый ответ
Для того, чтобы выяснить , какие копии bash
будет пытаться выполнить, используйте встроенный type
утилиты Баш в. Чтобы узнать, какая копия du
, например, будет выполнена, запустите:
$ type du
du is /usr/bin/du
Теория
Когда вы просите bash
выполнить что-то, bash
выполняет два шага:
Во-первых, он проверяет свой кэш на наличие файла. Это список имен исполняемых файлов и места, где находился файл в последний раз, когда bash
его выполнил.
Во-вторых, если файл не находится в кэше, он проверяет путь, ища каждый каталог в пути слева направо.
Обратите внимание, что ответ зависит от того, запускали ли вы исполняемый файл в текущей оболочке перед копированием. Если это так, bash
возможно, сохранил свое местоположение в кэше и будет игнорировать все новые местоположения, в которых он может находиться после того, как вы сделаете копии. Если его нет в кэше, то какой файл выполняется, зависит только от порядка каталогов в пути.
Подробнее
Чтобы увидеть, что находится в текущем кэше bash, запустите:
$ declare -p BASH_CMDS
declare -A BASH_CMDS='([du]="/usr/bin/du" )'
Приведенные выше показывает , что только du
было в кэше , когда я побежал , что. Если бы я выполнил больше команд, а затем снова запустил их, в кэше было бы больше.
Чтобы увидеть текущий путь, выполните:
$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:/usr/X11R6/bin
Путь - это список, разделенный двоеточиями. Выше показано пять каталогов в пути. Их будут искать, начиная слева и работая справа.
Могу ли я установить предпочтение?
Да, вы можете изменить порядок каталогов в пути.
Кроме того, для интерактивной работы вы можете установить псевдоним. Например:
$ alias dd=/opt/bin/dd
После установки вышеуказанного псевдонима вы можете ввести dd
в командной строке, и bash
будет игнорировать кеш и игнорировать PATH и запускать (или пытаться запустить) /opt/bin/dd
.