Почему $ PATH не отражает то, что находится в файле среды, Ubuntu 18.04? - proUbuntu
4 голосов
/ 19 августа 2018

echo $PATH обеспечивает:

/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin

в то время как /etc/environment заявляет

PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Я считаю, что файл среды отвечает за настройку среды PATH. Я имею в виду, что файл называется окружением, и единственное, что в нем есть, это путь. Что мне не хватает?

Это Ubuntu 18.04.1, и когда я пытаюсь запустить pcsxr, он сообщает, что /usr/games не добавлен в переменную окружения. Это кажется верным с одной точки зрения и ложным с другой точки зрения. Нет проблем с файлом рабочего стола, он был проверен. Кроме того, эта игра была подтверждена на /usr/games

Выполнение этой команды:

$ grep --color -H 'PATH=' ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login \
                    ~/.bash_aliases /etc/bash.bashrc /etc/profile \
                     /etc/profile.d/* /etc/environment 2> /dev/null

/home/neonred811/.profile:    PATH="$HOME/bin:$PATH"
/home/neonred811/.profile:    PATH="$HOME/.local/bin:$PATH"
/etc/environment:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Ответы [ 2 ]

1 голос
/ 12 ноября 2018

У меня была такая же проблема при попытке установить переменную окружения JAVA_HOME ( ссылка ) после установки пакета default-jdk apt, также в Ubuntu 18.04.1.

Настройка JAVA_HOME в /etc/environment вообще не работает, даже если этот файл является символической ссылкой в ​​/usr/lib/environment.d/, как описано здесь .

Установка его в ~/.profile сработала, но, очевидно, не для всей системы, поэтому некоторые инструменты не могли ее увидеть, и это было просто боль.

В итоге я установил его с помощью скрипта в /etc/profile.d/, как описано здесь , и это наконец сработало.

Понятия не имею, почему /etc/environment не работает. Я успешно использовал этот метод в Ubuntu 16.04, но не повезло 18.04. Я также добавил все в /etc/, как описано в этом связанном вопросе , и также предложил здесь, но не смог разобраться в этом.

0 голосов
/ 19 августа 2018

Вы можете использовать grep, чтобы узнать, где устанавливается /usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:

time sudo grep -rnw \
--exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e \
"/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin"

Это займет несколько минут, чтобы приготовить кофе или вынести мусор. На твердотельном накопителе NVMe это займет 45 секунд и покажет это:

Binary file /home/rick/.mozilla/firefox/9fu0cuql.default/places.sqlite matches
Binary file /home/rick/.mozilla/firefox/9fu0cuql.default/places.sqlite-wal matches

real    0m46.343s
user    0m13.143s
sys     0m8.853s

В моей системе единственное место, где путь перекрывается, как у вас, - Firefox.

Однако моя $PATH переменная всегда нормальна (для меня):

$ echo $PATH
/home/rick/bin:/home/rick/.local/bin:/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
...