Как зафиксировать ~/.profile и ~/.bashrc синтаксические ошибки

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.  

Как я должен зафиксировать эти файлы? Какую дополнительную информацию я должен обеспечить так, чтобы кто-то более хорошо осведомленный, чем я мог решить эту одурманенную проблему?

3
задан 5 March 2020 в 18:22

3 ответа

Это может произойти, если Ваши файлы имеют непечатаемую последовательность байта в запуске - например, метке порядка байтов - возможно, в результате того, что отредактировали их, одним словом, программа процессора или текстовый редактор 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.
2
ответ дан 17 March 2020 в 00:08

Простой способ проверить оболочку пользователя...

Если Вы не имеете Users and Groups приложение, уже установленное, установите его этот путь...

sudo apt-get update

sudo apt-get install gnome-system-tools

Нажмите Супер клавишу и введите "Пользователей", выберите Users and Groups приложение, нажмите на имя учетной записи, затем Расширенные настройки, Вкладка "Дополнительно", и проверьте корректный Shell /bin/bash.

1
ответ дан 17 March 2020 в 00:08

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.)

Спасибо все для Ваших комментариев и помощи.

0
ответ дан 17 March 2020 в 00:08

Другие вопросы по тегам:

Похожие вопросы: