Команда Linux "which" не находит исполняемые файлы по пути NFS в Ubuntu

Я заметил, что команда оболочки Linux "которая" НЕ показывает исполняемый файл, хотя она уже есть в пути поиска.

В частности, мой $PATH включает в себя "~/.local/bin"; исполняемый файл ~/.local/bin/charm. "Какой шарм" ничего не возвращает, хотя я могу запустить "Шарм" без проблем. Я использую Ubuntu 16.04 и Bash

Проблема зависит от дистрибутива Linux. Если я вхожу в другую машину RHEL 6.10, команда 'charm' отлично работает для того же исполняемого файла.

Проблема также может касаться монтирования nfs. В Ubuntu 16.04 команда 'which', кажется, отлично работает для исполняемых файлов на локальных дисках, например, 'которая, которая' показывает '/ usr / bin / which', но она НЕ находит исполняемые файлы по путям nfs, что имеет место для моего "~/.local/bin".

Я искал в Интернете, но не мог найти объяснение. Есть ли способ заставить команду 'which' в Ubuntu показывать все подключенные исполняемые файлы по пути, включая монтирование nfs?

Спасибо!

1 ответ

Решение

Ваш $PATH включает в себя ~/.local/bin где тильда не была расширена. bash будет расширять его на лету каждый раз, но which (по крайней мере, в Ubuntu) или sh не будет.

Если ты хочешь which чтобы увидеть исполняемые файлы в ~/.local/bin Вы должны убедиться, что тильда расширена до того, как PATH переменная получает это. Строка ~/.local/bin вероятно добавлен к вашему PATH одним из сценариев запуска. Найдите соответствующую строку и исправьте ее в соответствии с примерами ниже.


Примечание: сначала запустите каждый из следующих примеров в новой оболочке, чтобы вы могли наблюдать ( echo "$PATH" ) как она меняет переменную каждый раз независимо.

Это не расширит символ тильды (из-за цитирования):

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

Это будет:

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

Или это:

PATH=~/.local/bin:$PATH

Правила расширения тильды несколько сложны. Рассмотреть возможность использования $HOME, Примеры:

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

Чтобы исправить уже установленный PATH переменная, заменить ~ в нем с содержанием $HOME:

PATH="${PATH/\~/$HOME}"
Другие вопросы по тегам