Я установил некоторую программу (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
Итак, у вас есть исполняемый файл 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.