Ubuntu 18.04.4 (автоматическое обновление от 18.04.3 всего несколько недель назад)
/bin/bash
После того, как я вхожу в систему от оболочки Gnome, это сообщение появляется, в то время как экран является просто фиолетовым и прежде чем рабочий стол появится:
Error found when loading /home/hfinger/.profile:
/home/hfinger/.profile: line 1: #: command not found
/home/hfinger/.bashrc: line 1: syntax error near unexpected token '('
/home/hfinger/.bashrc: line 1: '# ~/.bashrc: executed by bash(1) for non-login shells.'
As a result the session will not be configured correctly.
You should fix the problem as soon as feasible.
Проблема, какова проблема? Я искал AskUbuntu, но никто, кажется, не испытал эту точную проблему. Я не думаю, что это - обновление, потому что это работало приблизительно в течение месяца, прежде чем эта проблема появилась.
Я никогда не касался этих двух файлов, потому что я довольно рад позволить системе создать и настроить их. Кроме того, я пытаюсь сохранить Ubuntu максимально ванильной, чтобы избежать необходимости восстанавливать настройки после обновления до нового выпуска. Если это имеет значение вот первые строки каждого из этих файлов:
.profile, line 1: # ~/.profile: executed by the command interpreter for login shells.
.bashrc, line 1: # ~/.bashrc: executed by bash(1) for non-login shells.
Как я должен зафиксировать эти файлы? Какую дополнительную информацию я должен обеспечить так, чтобы кто-то более хорошо осведомленный, чем я мог решить эту одурманенную проблему?
Это может произойти, если Ваши файлы имеют непечатаемую последовательность байта в запуске - например, метке порядка байтов - возможно, в результате того, что отредактировали их, одним словом, программа процессора или текстовый редактор Windows.
Например, данный
$ file profile bashrc
profile: UTF-8 Unicode (with BOM) text
bashrc: UTF-8 Unicode (with BOM) text
(где profile
и bashrc
локальные копии моего ~/.profile
и ~/.bashrc
с последовательностью байта 0xFE 0xFF
вставленный в запуске) затем
$ bash -c 'source profile; source bashrc'
profile: line 1: #: command not found
bashrc: line 1: syntax error near unexpected token `('
bashrc: line 1: `# ~/.bashrc: executed by bash(1) for non-login shells.'
Самая простая фиксация должна использовать dos2unix
, который удаляет BOM по умолчанию:
$ dos2unix profile bashrc
dos2unix: converting file profile to Unix format...
dos2unix: converting file bashrc to Unix format...
$ file profile bashrc
profile: ASCII text
bashrc: UTF-8 Unicode text
Или можно просто заменить файлы новыми копиями с /etc/skel
каталог когда Вы обнаружили (хотя, очевидно, Вы потеряете любые настройки тот путь).
Другие способы проверить на непечатаемые байты
cat -A ~/.profile ~/.bashrc
в котором BOM обнаружится как управляющая последовательность как M-oM-;M-?#
или использование xxd
или od
исследовать последовательности байта непосредственно
head -1 ~/.profile | od -tx1
xxd -l16 ~/.profile
diff
команда полезна поскольку подтверждение, что там различие, но не в идентификации, каково различие:
$ diff profile ~/.profile
1c1
< # ~/.profile: executed by the command interpreter for login shells.
---
> # ~/.profile: executed by the command interpreter for login shells.
Простой способ проверить оболочку пользователя...
Если Вы не имеете Users and Groups
приложение, уже установленное, установите его этот путь...
sudo apt-get update
sudo apt-get install gnome-system-tools
Нажмите Супер клавишу и введите "Пользователей", выберите Users and Groups
приложение, нажмите на имя учетной записи, затем Расширенные настройки, Вкладка "Дополнительно", и проверьте корректный Shell /bin/bash
.
Ubuntu 18.04.4 (автоматическое обновление от 18.04.3 всего несколько недель назад)
/bin/bash
Я не знаю то, чем проблема была всего лишь, это - способ, которым я зафиксировал ее:
$ cd ~
$ which bash
/bin/bash
$ mv .profile .profile.bak
$ mv .bashrc .bashrc.bak
$ cd /etc/skel/
$ cp .profile ~/.profile
$ cp .bashrc ~/.bashrc
(Примечание: /bin/bash
корректное местоположение для bash
.)
Спасибо все для Ваших комментариев и помощи.