PATH in shell получает загадочный вход (fish shell, система Ubuntu) - PullRequest
0 голосов
/ 16 апреля 2019

Я использую рыбную раковину в системе Ubuntu. Этот вопрос касается избыточности в $PATH, которую я устанавливаю непреднамеренно.

Когда я печатаю echo $PATH, я получаю:

/ opt / anaconda3 / bin / /opt/anaconda3/etc/fish/conf.d/ / opt / anaconda3 / bin / /opt/anaconda3/etc/fish/conf.d/ / usr / local / sbin / usr / local / bin / usr / sbin / usr / bin / sbin / bin / usr / games / usr / local / games.

Множество неприятностей с этим: / opt / anaconda3 / bin появляется дважды, показывая некоторые несуществующие каталоги: / usr / local / games /usr/games.

Мой / etc / login.defs читает:

ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin

Так что избыточность не приходит оттуда. Конечно, мой PATH в config.fish установлен как:

set -gx PATH /opt/anaconda3/bin/ (/opt/anaconda3/bin/conda info --root)/etc/fish/conf.d/ $PATH .

Мой вопрос: откуда рыба получает PATH , кроме того, что установлено в моей среде и что ему передается: / etc / login.defs ?

ОБНОВЛЕНИЕ: я изменил на использование переменной fish_user_paths, согласно документации, которая дважды удаляла / opt / anaconda3 / bin. Тем не менее / usr / games / и / usr / local / games добавляются автоматически (и эти каталоги не существуют в моей системе!).

1 Ответ

1 голос
/ 18 апреля 2019

Посмотрев в Интернете, это не проблема, связанная с раковиной: рыбная раковина или любая другая раковина.Это проблема Linux.Ядро, где-то перед разветвлением init, читает файл: / etc / environment и устанавливает системный путь по умолчанию.

В однопользовательской среде мы можем просто отредактировать этот файл - если будем настаивать.Лично я добавил строки в свой профиль рыбы, чтобы удалить несуществующие каталоги с пути:

if set -l index (contains -i -- /usr/local/games $PATH) set --erase PATH[$index] end if set -l index (contains -i -- /usr/games $PATH) set --erase PATH[$index] end

...