Я не могу найти .bash_profile в Ubuntu


67

Я не могу найти .bash_profileв Ubuntu 14.04 в моем /home/userкаталоге. Я использовал ls -aкоманду, чтобы увидеть .bash_profile, но такого файла нет.


1
Вы должны использовать ~/.profileвместо этого.
Муру

2
возможный дубликат я не могу найти .bash_profile
Алаа Али

1
Довольно часто отсутствует какой-либо файл конфигурации (или даже каталоги). В этом случае программное обеспечение, которое должно их читать, будет использовать конфигурацию по умолчанию и / или читать другие источники для получения конфигурации. Если вы хотите изменить несуществующий файл конфигурации, просто сначала создайте его.
Бакуриу

Ответы:


84

Ubuntu использует ~/.profile.

Вы можете создать свой .bash_profileв Ubuntu, но тогда .profileне будет читаться.

Если мы читаем .profile содержание:

cat ~/.profile

выход

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

Так что используйте ~/.profileвместо~/.bash_profile


.profile не работает для меня. Я должен был отредактировать .bashrc vim ~/.bashrcтогда. ~/.bashrc
Нахид

Использование .bash_profile не работает в Ubuntu. В качестве оболочки входа в систему с графическим интерфейсом используется Dash, а не Bash, поэтому bash_profile не читается.
Джонатан Хартли

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

8

При вызове оболочки оболочки bash ищет свои конфигурационные файлы в следующем порядке:

[0] ~/.bash_profile
[1] ~/.bash_login
[2] ~/.profile

После нахождения первого, он перестает искать других, поэтому, если есть .bash_profileв моем $HOMEbash, не будет искать .bash_loginи .profileбольше.

Из этих трех имен файлов, Ubuntu по умолчанию использует, .profileвы можете переименовать его, .bash_profileесли хотите:

mv ~/.profile ~/.bash_profile

Теперь , если мы открываем новую Баш оболочку , используя bash -l, su - $USER, sudo -u $USER -iили любые другие команды , которая работает Баш как шелл, ~/.bash_profileполучат источники.

Важно отметить:

То, о чем я говорил до сих пор, относится только к самому Bash, когда вы входите в систему из графического интерфейса, менеджер дисплея отвечает за поиск правильных файлов.

Ubuntu использует в gdm3качестве диспетчера отображения, если мы посмотрим: /etc/gdm3/Xsessionмы видим, что ни один из файлов не будет получен, кроме .profile:

# First read /etc/profile and .profile
for file in /etc/profile "$HOME/.profile"; do
  if [ -f "$file" ]; then
    source_with_error_check "$file"
  fi
done

поэтому, если вы используете графический интерфейс для входа в систему, сохраните файл под .profileименем, иначе вы можете пропустить некоторые переменные и настройки в вашей среде.

Я думаю, что лучший вариант - создать символическую ссылку на .profile:

ln -s ~/.profile ~/.bash_profile

Теперь ваши данные живут .profile, gdmничего не пропускают, bash загружает, .bash_profileчто на самом деле .profile, и редактируя каждую из них, вы получаете тот же результат.

Отсутствует .profile?

Если у вас нет, .profileто возьмите его отсюда:

cp /etc/skel/.profile ~/.profile

или же

# Remember the note above
cp /etc/skel/.profile ~/.bash_profile

Но если Bash сначала ищет ~ / .bash_profile, то почему он не делает этого в Ubuntu? Ubuntu модифицировал Bash? Это кажется странным. man bashв Ubuntu все еще описывает, как он будет искать .bash_profile в первую очередь.
Джонатан Хартли,

.bash_profile Сначала он ищет, что не может найти его (потому что он не существует), затем ищет, .bash_loginне может найти его снова (потому что Ubuntu не использует эти два имени), в конце концов, он ищет, .profileи да, это так. Так что, если вы создаете .bash_profilein, ~то вы перезаписываете Ubuntu ~/.profile, это стандартное поведение bash, здесь ничего не было изменено.
Равексина

Правильно, я тоже так думал сначала! И то, что вы описываете, происходит на RHEL. Но на Ubuntu это не так. Если я создаю .bash_profile, это не читается. Я только что понял, что это потому, что Ubuntu больше не использует Bash в качестве оболочки входа в систему с графическим интерфейсом. Вместо этого он использует «Dash». Я думаю, что это было правдой с 18.04.
Джонатан Хартли,

Вы упускаете суть здесь. На самом деле мы говорим о самом bash, что я говорю здесь о том, что Ubuntu создает «.profile», а не другие, поэтому, если мы откроем новую оболочку bash (login shell), это порядок чтения этих файлов, не так ли? Неважно, какой дистрибутив мы используем. :)
Равексина

Если читатели переименуют .profile в .bash_profile, как подсказывает ваш ответ, то для людей в Ubuntu этот файл не будет прочитан ни при входе в систему, ни при открытии терминала. Вы сломали их систему. Единственный способ чтения файла - это если они запускают сеансы bash с аргументом --login, чтобы явно сделать его оболочкой входа. Это никогда не произойдет автоматически на их рабочем столе.
Джонатан Хартли,

5

Это означает, что файл не существует. Но вы можете создать файл и bashвыполнить / использовать его, если bashон вызывается как оболочка для входа. Поэтому вы всегда входите в систему через оболочку (например, через ssh).

Если вы хотите, чтобы контент выполнялся каждый раз, когда вы открываете терминал, вам следует .bashrcвместо этого изменить файл.


Можете ли вы получить представление о том, почему отсутствует файл .bash_profile?
Roledenez

Вы можете скопировать его из /etc/skel/каталога.
Frantique

Это дизайнерское решение канонического. Но это не значит, что не могу этого сделать.
хаос

Я объяснил причину .bash_profileотсутствия (и не работает) Ubuntu в комментариях к другим ответам.
Джонатан Хартли,

2

Топ ответа использовать ~/.profileвместо того ~/.bash_profile, чтобы не работать для меня.

Модификация .bashrcсработала

Только что:

vim ~/.bashrc

Примечание: я использую Ubuntu WSL.


В подлинном Linux .profile применяется, когда вы входите в GUI, подключаетесь удаленно или входите в консоль, то есть после нажатия ctrl + shift + F2. Предполагается, что он представляет начальный момент входа в систему на компьютере, создавая оболочку, которая является родительской для всех других процессов, которые вы впоследствии создаете. Я подозреваю, что в WSL такого понятия нет, поэтому ваш .profile никогда не будет прочитан.
Джонатан Хартли

мне то же. ~/.profileпросто не загружается по умолчанию в Ubuntu 18.04
javapowered

0

Если вы имеете в виду .bashrc, вы найдете его в своей домашней папке. Если его там нет, вы можете скопировать его из папки / etc / skel в вашу домашнюю папку.

Если вам нужна дополнительная информация по этому вопросу, пожалуйста, посетите страницу stefaan lippens.

http://stefaanlippens.net/bashrc_and_others

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.