[РЕШЕНО]XFCE Archlinux не исполняет .bashrc
Коллеги, казалось бы поставил Арч, поставил xfce, все вцелом работает, не нарадуюсь (удаленная машина). Но ни в пользовательских аккаунтах, ни в рутовом не исполняются alias ls='ls -la --color=auto'
Права вроде верные -
-rw-r--r-- 1 root root 191 сен 2 12:21 .bashrc
ЧЯДНТ?
Ответ указал уважаемый Vasek https://archlinux.com.ru/forum/viewtopi ... 9672#p9672
Права вроде верные -
-rw-r--r-- 1 root root 191 сен 2 12:21 .bashrc
ЧЯДНТ?
Ответ указал уважаемый Vasek https://archlinux.com.ru/forum/viewtopi ... 9672#p9672
Последний раз редактировалось lnx 05.09.2025 21:41, всего редактировалось 2 раза.
https://www.gnu.org/software/bash/manua ... ml#Aliasesbeisic: ls - это уже команда, а в алиасе Вы ее опять повторяете. Получается как-бы цикл одной и той же команды.
The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. This means that one may alias ls to "ls -F", for instance, and Bash does not try to recursively expand the replacement text.
lnx
для начала убедитесь что находитесь именно в bash оболочке
для начала убедитесь что находитесь именно в bash оболочке
$ echo $0
bash
$ type -a ls
ls — это псевдонимом для «ls --color=auto»
ls является /usr/bin/ls
ls является /usr/lib/plan9/bin/ls
$ sh
sh-5.3$ echo $0
sh
sh-5.3$ type -a ls
ls является /usr/bin/ls
ls является /usr/lib/plan9/bin/ls
echo $0
-bash
[root@DT ~]# ll
-bash: ll: command not found
[root@DT ~]#
cat /root/.bashrc
alias ls='ls -la --color=auto'
alias ll='ls -latr --color=auto'
export EDITOR=/usr/bin/vim
export VISUAL=$EDITOR
bash -v
#
# /etc/bash.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# Prevent doublesourcing
if [[ -z "${BASHRCSOURCED}" ]] ; then
BASHRCSOURCED="Y"
# the check is bash's default value
[[ "$PS1" = '\s-\v\$ ' ]] && PS1='[\u@\h \W]\$ '
case ${TERM} in
Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|tmux*|xterm*)
PROMPT_COMMAND+=('printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"')
;;
screen*)
PROMPT_COMMAND+=('printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"')
;;
esac
fi
if [[ -r /usr/share/bash-completion/bash_completion ]]; then
. /usr/share/bash-completion/bash_completion
fi
alias ls='ls -la --color=auto'
alias ll='ls -latr --color=auto'
export EDITOR=/usr/bin/vim
export VISUAL=$EDITOR
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"
[root@DT ~]#
Последний раз редактировалось lnx 03.09.2025 10:44, всего редактировалось 1 раз.
Алиса
Проверка работы команды alias (создания псевдонимов команд)
- выполнить команду alias --- выводит список всех созданных и существующих псевдонимов в текущей сессии терминала
- выполнить команду alias -p --- выводит список всех активных в данный момент псевдонимов
- проверить, работает ли псевдоним, можно с помощью команды type <name> (на пример, type ls ) --- если псевдоним определён, она выведет, что псевдоним заменён командой
Проверка работы команды alias (создания псевдонимов команд)
- выполнить команду alias --- выводит список всех созданных и существующих псевдонимов в текущей сессии терминала
- выполнить команду alias -p --- выводит список всех активных в данный момент псевдонимов
- проверить, работает ли псевдоним, можно с помощью команды type <name> (на пример, type ls ) --- если псевдоним определён, она выведет, что псевдоним заменён командой
Ошибки не исчезают с опытом - они просто умнеют
если первой выполнить команду bash, то далее все работает "как надо", но ведь -
?!
Скажу больше, установка была строго по инструкции. И впервые с таким артефактом. Причем на трех машинах запуск происходит без вских gdm и ему подобных, и лишь на одной такая проблема.
Проверка правильности записей в bashrc проходит автоматом и сведения об ошибках всегда выдаются в консоль при логине. Ошибок нет.
echo $0
bash
Скажу больше, установка была строго по инструкции. И впервые с таким артефактом. Причем на трех машинах запуск происходит без вских gdm и ему подобных, и лишь на одной такая проблема.
Проверка правильности записей в bashrc проходит автоматом и сведения об ошибках всегда выдаются в консоль при логине. Ошибок нет.
выше вы писали:
там у вас bash именно так с черточкой и выводит ? "-bash"
чтобы проверить интерактивна ли оболочка введите
если оболочка интерактивна то в выводе должна присутствовать буква
если её нету значит bash запущен в режиме "Login shells" и тогда естественно алиасы не будут подцепляться из указанного конфига, что в свою очередь, как мне кажется, может быть связанно с доступом через ssh
echo $0
-bash
[root@DT ~]# ll
-bash: ll: command not found
[root@DT ~]#
...
если судить по загрузке конфигурационных файлов(https://wiki.archlinux.org/title/Bash#C ... tion_files) bash то скорее всего при первоначальном вызове оболочки она загрузилась как "Login shells" а не "Interactive"lnx: если первой выполнить команду bash, то далее все работает "как надо"
чтобы проверить интерактивна ли оболочка введите
echo $-
i
все вцелом работает, не нарадуюсь (удаленная машина)
как в воду глядели - действительно, установка по инструкции, но по схеме "загрузились с флэшки + запуск демона ssh" и далее дистанционно по инструкции. Вопрос как это исправить? чтобы запускалась всегда интерактивно?Arhei:может быть связанно с доступом через ssh
Да, создать. Точнее он и был, но не было в нем строки
[[ -f ~/.bashrc ]] && . ~/.bashrc
Удивлен. Строка, да и сам такой файл есть далеко не не всех машинах, и там, где есть, далеко не всегда есть эта строка. Но ПБТ (пусть Будет Так). Спасибо за тык носом и расширение моего кругозора.
[[ -f ~/.bashrc ]] && . ~/.bashrc
Удивлен. Строка, да и сам такой файл есть далеко не не всех машинах, и там, где есть, далеко не всегда есть эта строка. Но ПБТ (пусть Будет Так). Спасибо за тык носом и расширение моего кругозора.
В арче есть. Ну а если вы любите работать под рутом - ССЗБ.lnx: да и сам такой файл есть далеко не не всех машинах, и там, где есть, далеко не всегда есть эта строка.
$: cat /etc/skel/.bash_profile
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE
довольно странно, так как сам файл /etc/skel/.bash_profile (и его содержимое)lnx: Да, создать. Точнее он и был, но не было в нем строки
[[ -f ~/.bashrc ]] && . ~/.bashrc
Удивлен. Строка, да и сам такой файл есть далеко не не всех машинах, и там, где есть, далеко не всегда есть эта строка.
$ cat /etc/skel/.bash_profile
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc
Файлы из /etc/skel/(папка шаблонов) копируются в папку пользователя при его создании.
То есть, у нас есть три варианта, вернее причины, отсутствия файла(или его содержимого) ~/.bashrc в папке пользователя
1) отсутствует или нарушен шаблон файла /etc/skel/.bash_profile
2) при создании пользователя не использовался ключ -m, --create-home в команде useradd, ну или использовали ключ -k и не туда указали.
https://man.archlinux.org/man/useradd.8
-m, --create-home
Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the -k option) will be copied to the home directory.
...
-k, --skel SKEL_DIR
The skeleton directory, which contains files and directories to be copied in the user's home directory, when the home directory is created by useradd.
This option is only valid if the -m (or --create-home) option is specified.
If this option is not set, the skeleton directory is defined by the SKEL variable in /etc/default/useradd or, by default, /etc/skel.
Absolute symlinks that link back to the skel directory will have the /etc/skel prefix replaced with the user's home directory.
в общем, скорее всего, что-то из этого, разбирайтесь.
Что касается определения что у нас запущенно login shell или interactive shell, вышеописанный мною способ через echo $- к сожалению не очень надёжно работает, но есть и другой способ с помощью shopt
$ bash -l
$ shopt | grep login_shell
login_shell on
$ exit
$ bash -i
$ shopt | grep login_shell
login_shell off
$ exit
bash -v
надо её просто хорошенько приготовить
для login shell
timeout -s INT 1 script -c 'bash --verbose -l' | grep -e "# /" -e "# ~/"
timeout -s INT 1 script -c 'bash --verbose -i' | grep -e "# /" -e "# ~/"
вывод будет примерно следующий
$ timeout -s INT 1 script -c 'bash --verbose -l' | grep -e "# /" -e "# ~/"
# /etc/profile
# /etc/locale.conf loads and overrides by kernel command line is done by systemd
# /etc/bash.bashrc
# ~/.bash_profile
# ~/.bashrc
Session terminated, killing shell... ...killed.
$ timeout -s INT 1 script -c 'bash --verbose -i' | grep -e "# /" -e "# ~/"
# /etc/bash.bashrc
# ~/.bashrc
Session terminated, killing shell... ...killed.