web-dev-qa-db-ja.com

〜/ .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を検索しましたが、この正確な問題を経験した人はいません。この問題が発生する前に約1か月間実行されていたため、アップグレードではないと思います。

システムにファイルを作成および構成させてよかったので、これら2つのファイルに触れたことはありません。また、新しいリリースにアップグレードした後で設定を復元する必要がないように、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.  

これらのファイルを修正するにはどうすればよいですか?このドープの問題を解決するために私よりも知識のある人がいるために、どのような追加情報を提供する必要がありますか?

4
Hedley Finger

これは、ファイルの先頭に印刷されないバイトシーケンスがある場合に発生する可能性があります(例: バイトオーダーマーク -ワードプロセッサプログラムまたはWindowsテキストエディターで編集した結果)。

たとえば、

$ file profile bashrc
profile: UTF-8 Unicode (with BOM) text
bashrc:  UTF-8 Unicode (with BOM) text

(ここで、profilebashrcは、~/.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.'

最も簡単な修正は、デフォルトでBOMを削除するdos2unixを使用することです。

$ 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.
4
steeldriver

ユーザーのシェルを確認する簡単な方法...

Users and Groupsアプリケーションがまだインストールされていない場合は、この方法でインストールしてください...

Sudo apt-get update

Sudo apt-get install gnome-system-tools

ヒット Super キーと入力して「ユーザー」と入力し、Users and Groupsアプリケーションを選択して、アカウント名をクリックし、[詳細設定]、[詳細設定]タブをクリックして、/bin/bashの正しいシェルを確認します。

1
heynnema