Привет.
Столкнулся с непонятной ерундой.
В системе Gentoo Linux 5.15.88-gentoo x86_64, у пользователя root, не применяются переменные окружения из файла ~/.bashrc.
server15 ~ # cat /root/.bashrc
# /etc/skel/.bashrc
#
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
alias la='ls -lah'
alias sss='sh sss'
alias nload='nload -i 100000 -o 100000'
alias kal='python'
alias top='top -1'
alias ll='ls -lh'
alias df='df -h'
export HISTCONTROL=ignoredups
export HISTIGNORE=":pwd:id:uptime:resize:clear:history:df:w:"
export HISTSIZE=5000
export HISTFILESIZE=5000
Почему так?
С простым пользователем в системе нет проблем, переменные применяются автоматически из ~/.bashrc.
Не хочется городить костыль в кроне у пользователя root.
# cat /root/.bashrc
# /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Put your fun stuff here.
export HISTFILESIZE=5000
Но только странно, почему у простого пользователя в той же системе, без создания файла (bash_profile) в корне его директории, переменные автоматически считываются и применяются из файлы .bashrc
Это только с 5.15.88 так? Может, стоит откатиться на 80? Там такого нет, только что проверил интереса ради.
Кстати, вопрос - что в 88 нового, стоит ли его юзать? Сейчас стоит 80, полет нормальный.
Как вы запускаете оболочку от обычного пользователя, и как от рута? Файл .bashrc обрабатывается только в том случае, если оболочка запущена как интерактивная, но не-логинная. Если она у вас запускается как логинная, то вместо .bashrc вызывается .bash_profile, .bash_login или .profile, смотря что из этого существует.
Как вы запускаете оболочку от обычного пользователя, и как от рута? Файл .bashrc обрабатывается только в том случае, если оболочка запущена как интерактивная, но не-логинная. Если она у вас запускается как логинная, то вместо .bashrc вызывается .bash_profile, .bash_login или .profile, смотря что из этого существует.
Не понял насчет логичная/интерактивная.
Консоль запускаю xfce4-terminal под обычным пользователем, после повышаю права su - до рута.
Не "логичная", а "логинная". От слова "логин". Эмуляторы терминала обычно запускают оболочку как не-логинную, а программы запроса пароля при входе в текстовую консоль без иксов - как логинную. Команда su запускает оболочку как логинную, если указать параметр "-" или "-l", и как не-логинную в противном случае. При ручном запуске оболочки (командой "bash") с той же целью используется параметр "-l" или "--login" (в отличие от su, сокращение этой опции до "-" здесь или недопустимо, или не документировано, не помню точно).
Конечно есть. Директория для пользователя создаётся в процессе прохождения хендбука, там выполняется команда useradd, которая копирует в директорию пользователя файлы из директории /etc/skel.
А с домашней директорией рута такого не происходит потому что она берётся как есть из состава файла stage3.
Файл stage3 формируется пакетом dev-util/catalyst. А у меня директория нормальная, потому что система старее, чем этот catalyst был написан. Тогда файлы stage3 формировали по-другому.
Надо написать багу по этому билду в bugs.gentoo.org. Ну, или лучше пофиксить сам catalyst.
Директория для пользователя создаётся в процессе прохождения хендбука, там выполняется команда useradd
Если в Gentoo, то не всегда, ещё ебилдом в acct-user, создается пользователь и каталог, хотя при этом тоже используется useradd, просто этого не видно.
Чего то не вкурил, где вы там dev-util/catalyst откопали? Или вы выпуски там строчите? Он не прописан в портах в profiles, по этому если вам каким то боком попалось, то если оно прописано в мире. Либо если вы используете какой то хитрый оверлей.