Не добавляется путь в PATH.

Автор anoobis, 14 декабря 2016, 07:59:47

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

anoobis

Всем привет!

В домашнем каталоге есть директория ~/.bin/ с исполняемыми файлами, путь к ней должен прописываться из файла .bash_profile такой строчкой:
[[ -d "$HOME/.bin" ]] &&  [[ $PATH != *.bin* ]] && export PATH="$HOME/.bin:$PATH"
однако, по факту, этого не происходит и после входа в окружение переменная пути имеет вид:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
В результате чего теряется доступ к большинству моих приложений. Почему так и как сделать правильно?

PS:

система Linux jes 3.16.0-4-586 #1 Debian 3.16.36-1+deb8u2 (2016-10-19) i686 GNU/Linux
рабочее окружение: LXDE, ligtdm

прежде профиль пользователя использовался на разных дистрибутивах и на других $PATH дополняется нормально. 
Интересно, что при открытии TTY, без входа в LXDE - путь добавляется, при последующем запуске иксов через startx он остаётся прописанным, но вход должен быть через дисплей-менеджер.
Пробовал также прописывать эту строку добавления пути в .xsessionrc,  ничего нового не происходит.

Что сделано не так?

vic5710

#1

admin$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
admin$ [[ $PATH =~ ".bin" ]] && echo OK || echo ERR
ERR
admin$ [[ $PATH =~ "bin" ]] && echo OK || echo ERR
OK
admin$ [[ $PATH != "bin" ]] && echo OK || echo ERR
OK
admin$ [[ $PATH != ".bin" ]] && echo OK || echo ERR
OK
admin$

anoobis

Цитата: vic5710 от 14 декабря 2016, 10:32:30

admin$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
admin$ [[ $PATH =~ ".bin" ]] && echo OK || echo ERR
ERR
admin$ [[ $PATH =~ "bin" ]] && echo OK || echo ERR
OK
admin$ [[ $PATH != "bin" ]] && echo OK || echo ERR
OK
admin$ [[ $PATH != ".bin" ]] && echo OK || echo ERR
OK
admin$

Примерно так я себе и представлял работу test, но проблема врядли в куске кода. Скорее всего, при запуске окружения из lightdm не выполняются стартовые файлы входа в профиль,
либо же lightdm/lxde подменяют переменную PATH на свою, ну или оба эти варианта вместе.

vic5710

Цитата: anoobis от 14 декабря 2016, 10:58:54либо же lightdm/lxde подменяют переменную PATH на свою, ну или оба эти варианта вместе.
не должно
.profile выполняется при логине каждый раз

anoobis

Цитата: vic5710 от 14 декабря 2016, 12:01:50.profile выполняется при логине каждый раз
Ну у .bash_profile то приоритет выше, shell юзера /bin/bash к тому же. Но я сделал симлинк .profile --> .bash_profile, путь по-прежнему не меняется.

vic5710

#5
попробуй лог сделать типа

echo $PATH >> path.log
/usr/bin/env >>env.log

я когда-то использовал это, ЕМНИП все получалось

anoobis

Как вообще формируется переменная PATH при загрузке ?

Добавил в /etc/profile $HOME/.bin,
Открыть содержимое (спойлер)
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="$HOME/.bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
[свернуть]
так на $PATH это никак не отразилось, чуть ниже вывод

vic5710,
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games


Зачем вам вывод переменных окружения !?
"$ env"
XDG_VTNR=7
SSH_AGENT_PID=1042
XDG_SESSION_ID=2
SAL_USE_VCLPLUGIN=gtk
XDG_GREETER_DATA_DIR=/var/lib/lightdm/data/i
QT_STYLE_OVERRIDE=GTK+
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=lxde-
GTK2_RC_FILES=/home/i/.gtkrc-2.0
USER=i
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
SSH_AUTH_SOCK=/tmp/ssh-02SVPAEnob9M/agent.1018
XDG_CONFIG_DIRS=/etc/xdg
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
DESKTOP_SESSION=LXDE
PWD=/home/i/desktop
EDITOR=/usr/bin/mcedit
LANG=ru_RU.UTF-8
GDM_LANG=ru_RU.utf8
GDMSESSION=LXDE
_LXSESSION_PID=1018
SHLVL=1
XDG_SEAT=seat0
HOME=/home/i
XDG_CONFIG_HOME=/home/i/.config
LOGNAME=i
XDG_DATA_DIRS=/usr/local/share:/usr/share:/usr/share/gdm:/var/lib/menu-xdg:/usr/local/share/:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-hoDdyN9wZb,guid=c3bb1c21c4ee49e0377d52955852b4cb
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG_CURRENT_DESKTOP=LXDE
NO_AT_BRIDGE=1
XAUTHORITY=/home/i/.Xauthority
_=/usr/bin/env
[свернуть]


Цитата: vic5710 от 14 декабря 2016, 13:39:56
я когда-то использовал это, ЕМНИП все получалось
Для чего мне это?

vic5710

Цитата: anoobis от 15 декабря 2016, 18:36:40Зачем вам вывод переменных окружения !?
(кликните для
мне он не нужен, нужен тебе если хочешь разобраться. УМВР

anoobis

Цитата: vic5710 от 15 декабря 2016, 19:59:50
нужен тебе если хочешь разобраться. УМВР
Это не так, мне всего лишь нужно чтобы при загрузке к переменной PATH добавлялся мой путь, остальное всё ваши фантазии.

vic5710


anoobis

Пока что, пришлось сделать костыль -


Файл: /usr/bin/startlxde
#!/bin/sh
[ -d "$HOME/.bin" ] && [ "$PATH" != *.bin* ] && export PATH="$HOME/.bin:$PATH"
...


В таком виде путь прописывается, остальные загрузочные файлы дебиан игнорирует. Буду весьма признателен, если появится более красивое и правильное решение. Тему не закрываю.

yoric

Помнится, тоже решал такую проблему. Как Вы уже заметили, в случае запуска Х-ов через startx или дисп. менеджер поведение различается. Сейчас не помню, но удалось где-то как-то удачно прописать, и поведение стало одинаково везде. Ещё учтите, что есть такая команда "export" в скриптах, по-моему, именно она (или её удаление) мне помогло.