Это происходит, когда вы добавляете буквальную тильду ~
к вашему PATH
вместо фактического пути к вашему домашнему каталогу.Перезапись ~
в /home/youruser
- это работа оболочки, а не инструмента или файловой системы.Например, если вы цитируете "~"
, это переписывание не происходит, и другие инструменты, такие как which
, запутываются.
Вот информация по этому вопросу из shellcheck wiki :
Буквенная тильда в PATH плохо работает во всех программах.
Проблемный код:
PATH="$PATH:~/bin"
Правильный код:
PATH="$PATH:$HOME/bin"
Обоснование:
Наличие букв ~
в PATH - плохая идея.Bash это обрабатывает, но больше ничего не делает.
Это означает, что даже если вы всегда используете Bash, вам следует избегать этого, потому что любая вызываемая программа, использующая PATH, будет эффективно игнорировать эти записи.
Например, make
может сказать foo: Command not found
, хотя foo
отлично работает из оболочки, и Make и Bash оба используют один и тот же PATH.Вы получите аналогичные сообщения от любых не вызванных bash-скриптов, и whereis
будет пустым.
Используйте вместо $HOME
или полный путь.