
Я спросилэтот вопроснекоторое время назад о том, что shell не отображает путь. Недавно я обнаружил, что .bashrc
не получает исходники (и это должно бытьобычная практика?). В настоящее время командная строка оболочки выглядит следующим образом:
-bash-4.3#
После выполнения source .bashrc
я могу получить ожидаемую командную строку оболочки:
root@ubuntu2011:~#
где ubuntu2011
имя машины. Как сделать так, чтобы приглашение выглядело так, как последнее, каждый раз при входе в систему?
ps .bashrc
это от:cp /etc/skel/.bashrc ~/.bashrc
ОБНОВЛЯТЬ: содержание ~/.profile
следующее:
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n
и echo $BASH
возвращается/bin/bash
ОБНОВЛЯТЬ: Ответы на вопросы @terdon:
- Как войти на сервер?
Я использую для входа в систему как
ssh [email protected]
root
- Выполняются ли эти команды от имени пользователя root?
Да.
ОБНОВЛЯТЬ: Вывод ls -l ~/.{profile,bashrc,bash_profile,bash_login}
:
ls: cannot access /root/.bash_login: No such file or directory
-rw-r--r-- 1 root root 63 Dec 24 2012 /root/.bash_profile
-rw-r--r-- 1 root root 3637 May 17 17:00 /root/.bashrc
-rw-r--r-- 1 root root 140 Apr 23 2010 /root/.profile
решение1
Это происходит, потому что вы входите в систему через ssh
. Это сводится к различиям между оболочками входа и не входа. Когда вы подключаетесь через ssh, вы запускаете интерактивную оболочку входа. Как объяснено в man bash
, этот тип оболочки будет:
Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией --login, он сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует. После считывания этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке и считывает и выполняет команды из первой существующей и доступной для чтения. Опция --noprofile может использоваться при запуске оболочки для подавления этого поведения.
Другими словами, ~/.bashrc
по умолчанию игнорируется при запуске оболочек входа. Простое решение — явно указать его источник из одного из считываемых файлов. Как вы можете видеть выше, оболочки входа сначала попытаются прочитать ~/.bash_profile
, и если он не существует ~/.bash_login
, и если он также не существует, они читают ~/.profile
. Поскольку у вас есть ~/.bash_profile
файл, вам нужно будет добавить в него эти строки:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
решение2
Поместите это в ваш ~/.profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi