Кажется, моя переменная PATH настроена нормально, но не работает [дубликат]

Я установил некоторую программу (xlsx2csv) с помощью pip3. Исполняемый файл программного обеспечения находится в ~ / .local / bin . Мой $ PATH определяется в ~ / .profile следующим образом:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"

echo $PATH
/home/bruni/bin:/home/bruni/.local/bin:/home/bruni/bin:/home/bruni/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Разрешения для исполняемого файла кажутся нормальными:

bruni@bruni-Inspiron-5547:~/.local/bin$ ls -l
total 44
-rwxrwxr-x 1 bruni bruni 42501 Jul  2 12:39 xlsx2csv

bruni@bruni-Inspiron-5547:~/.local/bin$ type -a xlsx2csv 
xlsx2csv is /home/bruni/.local/bin/xlsx2csv
xlsx2csv is /home/bruni/.local/bin/xlsx2csv

Тем не менее, я не могу вызвать установленное программное обеспечение, не указав точный путь.

:~$ xlsx2csv
-bash: /usr/bin/xlsx2csv: No such file or directory
1
задан 2 July 2018 в 13:34

1 ответ

Итак, у вас есть исполняемый файл xlsx2csv в папке ~/.local/bin, который правильно добавляется в переменную $PATH (даже дважды, что должно быть исправлено, но не критично).

Он корректно распознается как исполняемый там, как мы можем видеть из вывода type -a xlsx2csv, в котором перечислены все типы / местоположения данной команды (например, встроенная оболочка / function / alias или исполняемый файл - для получения дополнительной информации введите help type.

Однако, Bash полагает, что его можно найти как /usr/bin/xlsx2csv, как вы видите в ошибке при попытке вызвать ее.

Это результат того, что Bash (и другие оболочки) используют внутреннюю хеш-таблицу для ускорения поиска команд. Вероятно, неправильная запись существует, потому что у вас был такой исполняемый файл в этом месте ранее и вы запустили его, но затем он был перемещен или деинсталлирован и переустановлен в другом месте.

Обычно Bash сбрасывает свою хеш-таблицу, когда есть события, которые, очевидно, делают ее недействительной, например, когда вы изменяете переменную $PATH. Он, очевидно, не распознал вашу процедуру переустановки, но мы можем сбросить ее вручную:

hash -r

Эта команда выше сбрасывает хэш-таблицу команд Bash и очищает все кэшированные записи расположения команд, заставляя ее делать регулярный поиск в $PATH при следующем вводе любой команды. Вы можете увидеть текущую хеш-таблицу, набрав только hash. Для получения дополнительной информации прочитайте ее справку, набрав help hash. Вы также можете посетить Какова цель хеш-команды? (Unix & amp; Linux SE) для получения дополнительной информации о хешировании местоположения команды Bash.

0
ответ дан 2 July 2018 в 13:34

Другие вопросы по тегам:

Похожие вопросы: