LINUX.ORG.RU

PATH и прочие пользовательские настройки

 , , ,


0

1

Вопрос: куда их правильно и в одно место писать?

Под правильно, я уточню: чтобы в случае миграции/замены какого-либо софта, мне не пришлось переписывать из файла в файл одно и то же. Т.е. я знаю в каких файлах что, информация не дублируется.

В чем проблема: вот есть .bashrc в котором у меня прописаны алиасы и кастомный PATH. А вот есть dmenu, который в упор не видит PATH. Я вспомнил про rofi, установил, уже привык из-за window run ssh модов, все нравилось. Более того, вчера же после установки он видел симлинк в моем $PATH:$HOME/bin из .bashrc. Сегодня он не видит ничего. Гугл сказал использовать .xinitrc, который я трогал только при установки арча: там нумлок и запуск i3 только стоит. Вписал туда - не работает. Второй вариант: .xprofile. Его у меня вообще не было. Ради 1 строчки новый файл, который за год ни разу не нужен был? А еще есть .bash_profile. В итоге целый зоопарк файлов, в которые ты вписываешь одно и то же.

Я ведь что-то делаю не так?

Ответ на: комментарий от JAkutenshi

Перезагружался?

Дело в том, что .profile читается при логине. Если у тебя сейчас уже иксы запущены, ты добавил строку и побежал радостно запускать rofi, то конечно, оно не увидит изменений.

Bash же свой конфиг (и ~/.profile тоже) читает при каждом запуске.

Psych218 ★★★★★ ()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Psych218

Да, оно там уже давно стоит. Вот в соседней теме про dmenu [bug?][dmenu]Не обрабатывает ~/bin есть мнение, что запускается от иксов. Сейчас гляну тыканье в его конфиги + возможно надо exec bash rofi делать.

JAkutenshi ()

из .bashrc. Сегодня он не видит ничего.

Потому что bashrc читается только в случае интерактивного запуска.

Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by the remote shell daemon, usually rshd, or the secure shell daemon sshd. If bash deter- mines it is being run in this fashion, it reads and executes commands from ~/.bashrc, if that file exists and is readable. It will not do this if invoked as sh.

.profile

Я этими вашими пингвинами давно не пользовался, но разве ~/.profile не читается шеллом при логине через этот самый шелл (и то, у zsh это называется zprofile)? А в случае использования логинменеджера все зависит от автора/дефолтов.

anonymous ()
Ответ на: комментарий от PtiCa

В ходе поисков выяснилось, что когда ставил арч, где-то вычитал строчки для автологина и писал их в /etc/profile .

Т.е. они работают, но этот файл он общий для всех юзеров, же? Я прав буду, что этот файл замещает собой ~/.profile для юзера?

JAkutenshi ()
Ответ на: комментарий от JAkutenshi

он общий для всех юзеров, же?

да

этот файл замещает собой ~/.profile для юзера?

нет. В рассматриваемом тобой случае, согласно ману баша, /etc/profile исполняется перед юзерским ~/.profile во время логина.

есть схема https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-ord...

Учти, что для не-баша и дла баша, запущенного как sh, она отличается. Это слишком сложно и запутано, поэтому по ссылке Вызов make с опцией -j8 из QtCreator (комментарий) я предлагаю упрощенное правило, и оно выглядит логичным и хорошо запоминается.

PtiCa ★★★★★ ()
Последнее исправление: PtiCa (всего исправлений: 3)
Ответ на: комментарий от PtiCa

Проблема в том, что ~/.profile не читается. Логинюсь через телетайп. В /etc/profile прописано, что если tty1, то стартует иксы.

Все содержимое /etc/profile :

# /etc/profile

#Set our umask
umask 022

# Set our default path
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
export PATH

# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
	for profile in /etc/profile.d/*.sh; do
		test -r "$profile" && . "$profile"
	done
	unset profile
fi

# Source global bash config
if test "$PS1" && test "$BASH" && test -z ${POSIXLY_CORRECT+x} && test -r /etc/bash.bashrc; then
	. /etc/bash.bashrc
fi

# Termcap is outdated, old, and crusty, kill it.
unset TERMCAP

# Man is much better than us at figuring this out
unset MANPATH

#autostart systemd default session on tty1
if [[ "$(tty)" == '/dev/tty1' ]]; then
	exec startx
fi

Как я понял, .profile должен тоже читаться, но нет. И я не могу понять где ошибся или сломал, когда ставил арч.

JAkutenshi ()
Ответ на: комментарий от JAkutenshi

если у тебя bash, и не читается ~/.profile, смело сделай в ~/.bash_profile


if [ -f ~/.profile ]; then
        . ~/.profile
fi

и всё не-бaш специфичное можешь перенеси в ~/.profile из ~/.bash_profile

Ну, а что там с tty - не подскажу

PtiCa ★★★★★ ()
Ответ на: комментарий от legolegs

точно так. Ман не даст соврать. Интересно, что в каких-то дистрибутивах ~/.profile читается, несмотря на то, что не указано в ~/.bash_profile

PtiCa ★★★★★ ()
Последнее исправление: PtiCa (всего исправлений: 1)
Ответ на: комментарий от PtiCa

profile, системный и пользовательский, читаются логин-шеллом. До какого из них дойдет дело, завит от их наличия, порядок см. в man bash /INVOCATION.

Так что в наличии и что исполняется?

bormant ★★★★★ ()
Ответ на: комментарий от bormant

да я уже сам этот bash invocation задрочил, в том числе в связи с этой темой. Короче, в наличии /etc/profile, ~/.bash_profile (без включения ~/.profile), ~/.profile. Код выполняется в таком же порядке: /etc/profile, ~/.bash_profile, ~/.profile . Хотя, по моим понятиям, ~/.profile в таком случае выполняться не должен, т.к. присутвует bash_profile.

PtiCa ★★★★★ ()