Почему команда «which» дает повторяющиеся результаты?

Ответы:

9

Проверьте свой путь. Это не так сложно закончить с дубликатами в нем. Пример:

»echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:
»which -a bash
/bin/bash
/usr/bin/bash

Это потому, что мой / bin является символической ссылкой на / usr / bin. Сейчас же:

»export PATH=$PATH:/usr/bin
»echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/bin
»which -a bash
/bin/bash
/usr/bin/bash
/usr/bin/bash

Поскольку / usr / bin теперь находится в моем $ PATH дважды, which -aнаходит один и тот же bash дважды.

лютик золотистый
источник
2
Чтобы развернуть: опция -a сообщает о ВСЕХ совпадениях в вашем PATH. Вот для чего это. Если, как отмечалось, ваш $ PATH ссылается на одно и то же место более одного раза, или один и тот же исполняемый файл находится в нескольких местах, он будет отображаться несколько раз с -a (но не при отсутствии этой опции).
SuperMagic
2

Как подсказывает подсказка и цитируя со страницы справочника, "Which takes one or more arguments. For each of its arguments it prints to stdout the full path of the executables that would have been executed when this argument had been entered at the shell prompt. It does this by searching for an executable or script in the directories listed in the environment variable PATH using the same algorithm as bash(1)."Что касается -aопции, в ней перечислены все исполняемые файлы с таким именем, найденные в $ PATH.

schaiba
источник
1

Взгляните на свой путь:

echo $PATH

На вашем пути есть повторяющиеся записи (или ruby ​​устанавливается несколько раз в разных местах).

Александр
источник
1

Пытаться

whereis -b ruby

Если вы получаете тот же вывод, то проблема в вашем PATH.

TPS
источник